2016-11-08 3 views
0

Ich habe die folgenden TabellenMySQL Union und JOIN

purchase_order   item 
------------------  ------------ 
id (PK)    id (PK) 
deleted    deleted 
name     name 
         purchase_order_id (FK) 

Wie kann ich eine Liste aller Elemente zurück, die zu einem nicht gelöscht, nicht-null PURCHASE_ORDER verbunden sind, und alle purchase_orders, die keinen Artikel verlinkt zu ihnen, entweder gelöscht oder nicht.

Eg Beispiel Tabellen

PURCHASE_ORDER

id name   deleted 
    --------------------------- 
    1  Big Sale  0 
    2  Other Sale 1 
    3  Empty Sale 0 

Artikel

id name   deleted purchase_order_id 
    ---------------------------------------------- 
    1  Fruit  1  1 
    2  Bread  0  1 
    3  Water  0  2 

Die richtige Abfrage gibt mir diese:

po_id name   item_id name 
------------------------------------ 
1  Big Sale  2  Bread 
3  Other Sale NULL  NULL 

Edit: das ist, wo ich habe zu aber der Profi blem ist besagt, dass i.deleted = 0, stoppt er alle Zeilen, die an einem Punkt kommen nicht von der Rückkehr

SELECT po.id, po.name, i.id, i.name 
FROM purchase_order po 
LEFT JOIN item i ON i.purchase_order_id=po.id 
WHERE po.deleted = 0 AND i.deleted = 0 
+2

Also, was Sie versucht haben, – RiggsFolly

+0

Added die Abfrage – Alasdair

+0

Verschieben Sie die 'AND ...' zu kurz vor der 'WHERE ...' – Strawberry

Antwort

1

@strawberry gab mir die Antwort

SELECT po.id, po.name, i.id, i.name 
FROM purchase_order po 
LEFT JOIN item i ON i.purchase_order_id=po.id AND i.deleted = 0 
WHERE po.deleted = 0 
+0

Entschuldigung. :) – Alasdair