2012-05-13 25 views
11

Mam tabeli 'meta_data' z następujących dziedzin:MySQL Dołącz samej tabeli

  • id
  • post_id
  • meta_key
  • meta_value

Chciałbym pętli przejrzeć i wyświetlić listę KAŻDEGO wpisu (post_id), który ma wpis dla meta_key='abc', ale nie jeden za meta_key='def'

Zasadniczo, każdy post, który ma meta_key='abc' wpis powinien posiada wpis meta_key='def'. Chcę wygenerować listę, więc mogę dodać brakujące wpisy meta_key='def'.

+5

To miło - ale co próbowaliście? –

Odpowiedz

14

Aby to achive zalecana użyj LEFT OUTER JOIN Operacja łączenia tej samej tabeli.

SELECT a.* 
FROM meta_data a 
LEFT OUTER JOIN meta_data b ON a.post_id = b.post_id AND b.meta_value = 'def' 
WHERE 
a.meta_value = 'abc' 
AND b.id IS null 
7

Złóż zewnętrzna (po lewej) przyłączyć do siebie, filtrowanie na tych zapisów, które nie mecz patrząc na rzędy z pustym identyfikatorem w połączonej tabeli:

select t1.* 
from meta_data t1 
left join meta_data t2 on t2.post_id = t1.post_id and t2.meta_key='def' 
where t1.meta_key='abc' 
and t2.id is null 
Powiązane problemy