2016-12-07 2 views
2

Ich möchte, wenn ich für courier_id suchen = 950 dann dauert es nur jene Ordnung, die gegen die Ordnung abgelehnt Tabelle nicht in sind courier_id = 950-Code zu finden Datensätze aus tableA, die in tableB nicht verfügbar sind

für ex -

Wenn ich für courier_id = 950 die Suche wird es nur um ID 852853 bcoz dies nehmen ist nicht in Ordnung abgelehnt Tisch gegen courier_id = 950

bitte Beispiel unten sehen

EX: -

Tabelle Orders

id, ordername 
850 test1 
851 test2 
852 test3 
853 test4 

Auftrag abgelehnt Tabellen

id,courier_id,order_id 
1 950  850 
2 950  851 
3 951  853 

Erwartete Ausgabe

Tabelle Orders

id, ordername 
852 test3 
853 test4 

Im Folgenden finden Sie meine Anfrage

SELECT o.id 
FROM orders o 
LEFT JOIN order_rejected_details r ON o.id = r.order_id 
WHERE r.courier_id != 950 
+0

SELECT o. * FROM Bestellungen o LINKE VERBINDUNG abgelehnt r ON o.id = r.id WHERE r.id IST NULL sollte die Aufgabe erledigen. – mirko911

+0

hast du den 'r.id IS NULL' Zustand versucht? –

+0

ich will, wenn ich nach courier_id = 950 suche, dann wird es nur jene Reihenfolge nehmen, die nicht in der Reihenfolge abgelehnte Tabelle gegen courier_id = 950 für ex sind - wenn ich nach courier_id = 950 suche, wird es nur Auftragsidentifikation nehmen 852,853 bcoz das ist nicht in der Reihenfolge zurückgewiesene Tabelle gegen courier_id = 950 –

Antwort

1

linken join müssen Sie den Zustand in WHERE Klausel ON Klausel übergeben

SELECT o.id 
FROM orders o 
    LEFT JOIN order_rejected_details r 
    ON o.id = r.order_id AND r.courier_id != 950 

[UPDATE]

Nachdem ich den Kommentar lesen, ich glaube, dass die richtige Abfrage Unterabfrage verwendet:

SELECT o.id 
FROM orders o 
WHERE 
    o.id NOT IN (
     SELECT r.order_id 
     FROM order_rejected_details r 
     WHERE r.courier_id = 950 
    ) 
+1

Sie haben einen linken Join verwendet und keine where-Anweisung angegeben. Sie werden jede ID in der Auftragstabelle abrufen. –

+0

Ich habe die Antwort geändert, um Unterabfrage zu verwenden, die alle Aufträge sucht, die ID nicht in zurückgewiesen mit courier_id = 950 ist. – rogeriolino

0

ein LEFT JOIN und Filter auf den NULL-Werten.

SELECT o.id, o.ordername 
FROM orders o 
LEFT JOIN order_rejected_details r ON r.order_id = o.id AND r.courier_id = 950 
WHERE r.id IS NULL 
0

Die Bedingung beseitigt die Zeilen mit Nullwerten. Daher muss eine zusätzliche Einschränkung hinzugefügt werden. Entweder

SELECT o.id, o.order_name FROM orders o LEFT JOIN orders_rejected r ON o.id = r. order_id 
WHERE r.courier_id != 950 OR r.courier_id IS NULL 

oder

SELECT o.id, o.order_name FROM orders o LEFT JOIN orders_rejected r ON o.id = r. order_id 
AND r.courier_id = 950 WHERE r.courier_id IS NULL 

Im ersten Code, die Reihen verbunden sind, und dann Reihen mit 'ID = 950' sind eliminiert. Während im letzteren Code die Zeilen mit 'id! = 950' beim Verbinden eliminiert werden.

-1

Sie können diese Abfrage für Ihren Zweck verwenden.

+0

Sie haben seinen Filter (950) nicht verwendet und GROUP_CONCAT wird eine durch Komma getrennte Zeichenfolge zurückgeben? Ich sehe nicht, wie das funktionieren wird. –

Verwandte Themen