Mam dwie tabele: pq i pe. Próbuję ustawić LEFT OUTER JOIN
lewy stolik (pq) na prawym stole (pe).MySQL pozostawił sprzężenie zewnętrzne z klauzulą where - zwracanie niedopasowanych wierszy
- pq ma podstawową kolumnę klucza id
- PE ma dwukolumnowy klucz podstawowy, więc może mieć wiele pqid lub żaden
- pe .uid kolumna musi być stosowana wyodrębnić tylko istotne dane (
WHERE pe.uid = "12345"
) - pe . Data należy dołączyć do każdego pq .id rząd
Oto jak wyglądają tabele:
pq:
id | data
1 | "abc"
2 | "efg"
pe:
pqid | uid | data
2 | 54321 | "uvw"
2 | 12345 | "xyz"
mogę użyć następującej kwerendy, aby dopasować pierwsze 2 rzędy pq .id do RLM .pqid
SELECT pq.id, pq.data, pe.data FROM pq
LEFT OUTER JOIN pe ON pq.id = pe.pqid
ORDER BY pq.id LIMIT 2
Otrzymuję:
pq.id | pq.data | pe.data
1 | "abc" |
2 | "efg" | "uvw"
Ale jeśli mogę użyć WHERE tak:
SELECT pq.id, pq.data, pe.data FROM pq
LEFT OUTER JOIN pe ON pq.id = pe.pqid
WHERE pe.uid='12345'
ORDER BY pq.id LIMIT 2
dostaję tylko jeden wiersz z pasującymi pe .pqid I pe .uid:
pq.id | pq.data | pe.data
2 | "efg" | "xyz"
Więc z WHERE klauzula Mam prawo pe .data, ale nie dostaję pq wierszy, które nie mają pq .ID dopasowanie RLM .pqid
Muszę dostać to:
pq.id | pq.data | pe.data
1 | "abc" |
2 | "efg" | "xyz"