Jeg har to tabeller A & B.
id | name | num
id | date | roll
id i tabell B er en fremmednøkkel som er relatert til id i tabell A.
Jeg ønsker å hente innholdet i tabell B der id er oppgitt, og sammen med disse dataene trenger jeg også navnet som id er oppgitt i tabell A.
Jeg googlet og fant ut noen rare nøkkelord LEFT, JOIN, men jeg kunne ikke forstå det.
Jeg trenger å få dato og rulle fra tabell B og navn fra tabell A i en enkelt spørring. (id er en fremmednøkkel)
Plugin jeg bruker tillater dessverre ikke flere spørsmål atskilt med komma, så jeg må gjøre begge SELECT
i ett spørsmål.
Sammenføyning av tabeller er et grunnleggende prinsipp i relasjonsdatabaser. I ditt tilfelle er A og B knyttet sammen med kolonnen id
, noe som betyr at du kan bruke en syntaks som ligner på denne:
SELECT a.id, a.name, a.num, b.date, b.roll
FROM a
INNER JOIN b ON a.id=b.id;
INNER JOIN
betyr at du bare ser rader der det finnes matchende poster i A og B. Hvis du vil ha alle radene i A og matchende poster i B, kan du endre INNER JOIN
til LEFT JOIN
. Hvis du derimot vil ha alle postene fra B og bare de matchende postene fra A, bruker du RIGHT JOIN
. Til slutt, hvis du trenger alt fra begge tabellene, matchende eller ikke, kan du bruke FULL JOIN
.
Du må sammenføye disse tabellene for å få det resultatet du ønsker.
SELECT b.*, a.name FROM tableB AS b INNER JOIN tableA as A ON (b.id=a.id);
Denne spørringen vil returnere alt fra tabell B og name
fra tabell A der ID-en fra tabell B er den samme som ID-en fra tabell A.
For å få resultatet fra de to tabellene som er knyttet til fremmednøkkelen, må du sammenføye tabellene.
Finn spørringen nedenfor slik du vil ha resultatet:
SELECT name, date, roll
FROM A
INNER JOIN B
ON A.id = B.id;