2016-07-15 4 views
0
   SELECT * 
       FROM fabric_restock AS fabr 
       LEFT JOIN fabric_po AS fabpo 
       ON fabpo.fab_id = fabr.fab_id 
       WHERE 
       fabr.fab_id NOT IN (  
       SELECT fabpo.fab_id 
       FROM 
       fabric_po fabpo 
       WHERE 
       fabpo.status <= 1 
       AND 
       fabpo.fab_id IS NOT NULL 
       ) 
       AND 
       fabr.restock_ten <= fabpo.qty 

// die komplette Abfrage null zurückgibt, wenn Unterabfrage gibt keine Zeilen oder gibt nullsNicht IN-Operator in mysql gibt

Wie kann ich dieses Problem beheben?

Es sollte stattdessen zurückgeben alle den Datensatz aus äußeren Abfrage, wenn Unter Abfrage keine Datensätze zurückgibt

bearbeiten: Original query:

   SELECT * 
       FROM fabric_restock AS fabr 
       LEFT JOIN fabric_po AS fabpo ON fabpo.fab_id = fabr.fab_id 
       WHERE 
       fabr.fab_id NOT IN (
       SELECT fabpo.fab_id 
       FROM 
       fabric_po fabpo 
       JOIN 
       fabric_challan fabchallan 
       ON 
       fabpo.po_num = fabchallan.po_num 
       WHERE 
       fabchallan.challan_num 
       NOT IN (SELECT challan_num FROM fabric_grn) 
       AND 
       fabpo.status <= 1 
       ) 
       AND 
       fabr.restock_ten <= fabpo.qty 

Beispieldaten:

# fab_id, fabric_mother_id, qty_mother, cluster, qty, cf_thirty, cf_ten, cf_three, cf_cluster, sellout_thirty, sellout_ten, sellout_three, num_good_sku, num_coll, num_collection_p, num_sale, new_cf, percentile, restock_thirty, restock_ten, restock_three, status, num_new, parent, lace_type, po_id, po_num, fab_id, vendor_code, color_code, qty, estimated_price, po_date, arrival_date, estimated_date, composition, material, type, inType, status, gsm, notes, image, approveStatus, approve_date, shrinkage, fabric_mother_id, qty_type, main_construction, place_order_date, width, vendor_comments, email_send, wash, brand 
FAB1001, SBL104, 10.00, cluster, 10.00, 10.00, 10.00, 10.00, 10, 10.00, 10.00, 10.00, 10, 10, 10, 10, 10.00, 10.00, 10.00, 10.00, 10.00, 0, 10, 1, Washed, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 
FAB1002, SBL101, 20.00, cluster1, 20.00, 20.00, 20.00, 20.00, 20, 20.00, 20.00, 20.00, 20, 20, 20, 20, 20.00, 20.00, 20.00, 20.00, 20.00, 0, 20, 2, Bleached, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 
FAB1003, SBL102, 30.00, cluster2, 30.00, 30.00, 30.00, 30.00, 30, 30.00, 30.00, 30.00, 30, 30, 30, 30, 30.00, 30.00, 30.00, 30.00, 30.00, 0, 30, 3, RFD, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 
FAB1004, SBL103, 40.00, cluster3, 40.00, 40.00, 40.00, 40.00, 40, 40.00, 40.00, 40.00, 40, 40, 40, 40, 40.00, 40.00, 10.00, 10.00, 10.00, 0, 40, 4, Dyed, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 

fabpo Tabelle: leer im Moment

+0

Obligatorisch [Gefahren der Not In] (http://stackoverflow.com/a/32175659) – Drew

+0

@Drew: Ich verstehe, dass aber nicht wissen, wie diese bestimmte Abfrage mit nicht ersetzen VORHANDEN –

+0

Können Sie einige Beispieldaten und das erwartete Ergebnis? Ich vermutete, was Sie versuchen zu tun, aber jetzt bin ich nicht sicher, ob ich es richtig gemacht habe – Philipp

Antwort

1

Sie schließen sich einem leeren Tisch an. Das ist in Ordnung.

Aber später versuchen Sie, einen Wert aus Ihrer Tabelle mit dem Nullfeld aus der Join-Tabelle zu vergleichen, die nicht funktioniert.

fabr.restock_ten <= fabpo.qty 

fabpo Tabelle: leer im Moment

Ich denke, man diese Situation durch Überprüfung auf null auf fabpo.qty umgehen konnte, obwohl es ein wenig seltsam (vielleicht nur, weil ich don ist verstehe nicht wirklich, was alle Spaltennamen bedeuten.

AND (fabr.restock_ten <= fabpo.qty OR fabpo.qty IS NULL) 
+0

Genau das, was ich heraufbringen wollte :). Das ist richtig. Was sollte die Arbeit dafür sein? Ich kann restock_ten nicht in der Unterabfrage verwenden und stellt jetzt fest, dass fabpo.qty auch nicht verwendet werden kann. Was soll ich machen? –

+1

Sie könnten nach Null suchen, oder Sie könnten 'fabr.restock_ten <= IFNULL (fabpo.qty, 0)' verwenden, um die Null in 0 zu verwandeln, aber dann würden Sie auch keine Ergebnisse bekommen, denke ich (Sie könnten es umdrehen einige sehr hohe Wert auch, um die Ergebnisse zu erhalten) – Philipp

+0

Awesome. Vielen Dank –