<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Appunti Digitali &#187; SQL</title>
	<atom:link href="http://mariano.altervista.org/wordpress/category/programmazione/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://mariano.altervista.org/wordpress</link>
	<description>Tutti desiderano possedere la conoscenza, pochi sono disposti a pagarne il prezzo</description>
	<lastBuildDate>Wed, 18 Nov 2009 20:32:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Join multipli sulla stessa tabella</title>
		<link>http://mariano.altervista.org/wordpress/2008/11/17/join-multipli-sulla-stessa-tabella/</link>
		<comments>http://mariano.altervista.org/wordpress/2008/11/17/join-multipli-sulla-stessa-tabella/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 18:29:23 +0000</pubDate>
		<dc:creator>mariano</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://mariano.altervista.org/wordpress/?p=182</guid>
		<description><![CDATA[Spesso può essere necessario fare due join sullo stesso campo della stessa tabella. Ad esempio, considerando di voler gestire un calendario di calcio, sarebbe probabile avere due tabelle, una partite, l&#8217;altra squadre. Nella prima potremmo memorizzare tutti i dati della partita, semplificando memorizzeremo, l&#8217;identificativo univoco della partita, l&#8217;id delle due squadre, e il risultato. La [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Spesso può essere necessario fare due join sullo stesso campo della stessa tabella. Ad esempio, considerando di voler gestire un calendario di calcio, sarebbe probabile avere due tabelle, una <em>partite</em>, l&#8217;altra <em>squadre</em>. Nella prima potremmo memorizzare tutti i dati della partita, semplificando memorizzeremo, l&#8217;identificativo univoco della partita, l&#8217;id delle due squadre, e il risultato. La seconda tabella può essere utilizzata per memorizzare l&#8217;idi delle squadre, il nome e altre informazioni che non servono al nostro esempio. Come fare ora per eseguire una query che sostituisca agli id delle due squadre nella tabella <em>partite</em> il nome memorizzato nella tabella <em>squadre</em><span id="more-182"></span></p>
<p>Ricapitolando, la tabella <em>squadre</em>:</p>
<ul>
<li>id_squadra</li>
<li>nome</li>
</ul>
<p>tabella <em>partite</em></p>
<ul>
<li>id_partita</li>
<li>id_casa</li>
<li>id_ospiti</li>
<li>gol_casa</li>
<li>gol_ospiti</li>
</ul>
<p style="text-align: justify;">Probabilmente, la prima soluzione che ci verrebbe in mente sarebbe quella di scrivere qualcosa del genere:</p>
<pre class="brush: sql">
SELECT *
FROM partite
JOIN squadre ON partite.id_casa = squadre.id_squadra
JOIN squadre ON partite.id_ospiti = squadre.id_squadra
</pre>
<p style="text-align: justify;">Qualcuno subito potrebbe notare che questa query andrà sicuramente in errore, in quanto così facendo stiamo chiedendo all&#8217;interprete SQL di eseguire due JOIN diverse sulla stessa tabella e sullo stesso campo, questo non gli piacerà e ci ritornerà un errore del tipo:</p>
<blockquote><p>#1066 &#8211; Not unique table/alias: &#8217;squadre&#8217;</p></blockquote>
<p style="text-align: justify;">La soluzione più veloce per risolvere questo problema consiste nel rinominare le tabelle su cui fare i due JOIN, ovvero rinominare la tabella <em>squadre</em> in modo da far credere all&#8217;interprete SQL che sia una tabella diversa. Ovvero:</p>
<pre class="brush: sql">
SELECT *
FROM partite
JOIN squadre AS sq_casa ON partite.id_casa = sq_casa.id_squadra
JOIN squadre AS sq_ospite ON partite.id_ospite = sq_ospite.id_squadra
</pre>
<p style="text-align: justify;">
In questo modo è come se avessimo 3 tabelle: <em>partite</em>, <em>sq_casa</em>, <em>sq_ospite</em> su cui potremmo operare indipendentemente.</p>
]]></content:encoded>
			<wfw:commentRss>http://mariano.altervista.org/wordpress/2008/11/17/join-multipli-sulla-stessa-tabella/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
