Se abbiamo due tabelle:
comments
key | value
=================
1 | foo
2 | bar
3 | foobar
4 | barfoo
e:
meta
comment_key | value
=========================
1 | 1
2 | 1
3 | 2
4 | 1
Desidero ottenere i commenti dalla tabella comment
che hanno uno comment_key
corrispondente nella tabella meta
con uno specifico value
(colonna value
nella tabella meta
).
Per esempio, mi piacerebbe per selezionare tutte le righe della tabella comment
che hanno un value
di 1
nella tabella meta
:
mi aspetto questi risultati:
key | value
=================
1 | foo
2 | bar
4 | barfoo
E se dovessi selezionare tutte le righe dalla tabella comment
che hanno uno 2
nella tabella meta
:
Mi aspetto questo risultato:
key | value
=================
3 | foobar
Spero davvero che qualcuno possa aiutare, grazie a tutti in anticipo!
Penso di aver bisogno di unirsi? Qualsiasi suggerimento sarebbe fantastico e, se possibile, una breve spiegazione in modo da poter capire dove stavo sbagliando -> così saprò per la prossima volta!
correzione - non importa se vengono utilizzati i predicati 'join',' exists' o 'in', sono tutti semi join - definiti come join che restituiscono righe da una tabella in base all'esistenza di righe correlate in un'altra tabella. –
@ JCooper: non lo vedo in questo modo. Supponiamo che per ogni record in 'parent', ci siano zero, uno o più record in' child'. Quindi un semi-join includerebbe zero o una copia di ogni record 'parent', mentre un SQL' INNER JOIN' includerebbe più copie di alcuni record 'parent'. Ma posso vederlo a modo tuo. Nell'algebra relazionale, un semi-join è equivalente a un inner-join seguito da una proiezione appropriata; quindi possiamo fare in modo che questa diventi una differenza tra le proiezioni SQL 'SELECT' e relazionale-algebra piuttosto che tra SQL' INNER JOIN' e semi-joins relazionale-algebra. – ruakh
Wow, ero così vicino, ho avuto '=' invece di 'IN'! Grazie, funziona a meraviglia! –