2016-06-07 8 views
1

ich eine SQL-Abfrage und wollen diesen Datensatz abzurufen:Ohne bestimmten Datensatz von SQL-Abfrage gesetzt

SELECT 
    Reference, DeliveryDate, SecondaryDate, PurchaseId, 
    ItemDescription, Status 
FROM 
    PLAYBOOK 
WHERE 
    (Supplier='PLAY') AND (Status = '0') 
ORDER BY 
    DeliveryDate DESC; 

Jedoch wünsche ich unten aus der ersten Abfrage abgerufen den Datensatz auszuschließen:

SELECT 
    Reference, DeliveryDate, SecondaryDate, PurchaseId, 
    ItemDescription, Status 
FROM 
    PLAYBOOK 
WHERE 
    (Supplier = 'PLAY') AND (Status = '0') AND (Tax = 'Yes') 
    AND (Problem = 'damaged'); 
+0

ist 'Reference' ein eindeutiger Schlüssel? – morcen

Antwort

1

Verwenden Sie diese, wenn Sie kümmern Order By auch nehmen. Sonst einfach verwenden except

select * from 
(
SELECT Reference, DeliveryDate, SecondaryDate, PurchaseId, 
ItemDescription, Status FROM PLAYBOOK 
WHERE (Supplier='PLAY') AND (Status = '0') 

EXCEPT 

SELECT Reference, DeliveryDate, SecondaryDate, PurchaseId, 
ItemDescription, Status FROM PLAYBOOK 
WHERE (Supplier='PLAY') AND (Status = '0') AND (Tax = 'Yes') AND (Problem = 'damaged') 
) t1 
ORDER BY DeliveryDate DESC 
+1

Ich sprang die Waffe in der Abstimmung für die anderen, sie sahen elegant aus, aber hat nicht funktioniert. Das hat es getan. –

0

Ihre Frage zu beantworten (ohne Kommentar anzubieten, ob was fragen Sie ist eine gute Idee):

SELECT Reference, DeliveryDate, SecondaryDate, PurchaseId, 
ItemDescription, Status, FROM PLAYBOOK 
WHERE (Supplier='PLAY') AND (Status = '0') 
AND Reference NOT IN (
    SELECT Reference FROM PLAYBOOK 
    WHERE (Supplier='PLAY') 
    AND (Status = '0') 
    AND (Tax = 'Yes') 
    AND (Problem = 'damaged') 
) 
ORDER BY DeliveryDate DESC 
2

Nur überprüfen Sie die zusätzlichen Bedingungen

SELECT Reference, DeliveryDate, SecondaryDate, PurchaseId, 
ItemDescription, Status, FROM PLAYBOOK 
WHERE (Supplier='PLAY') AND (Status = '0') 
AND (Tax != 'Yes') AND (Problem != 'damaged') 
ORDER BY DeliveryDate DESC 

Keine Notwendigkeit für Unterabfrage

+0

Ihre Abfrage kann keine Datensätze mit Tax = "Ja" und Problem <> "Beschädigt" abrufen. –

+0

@WangWei das ist kein ODER es ist ein UND – Sherlock

+0

Toby will nur ausschließen (Supplier = 'PLAY') UND (Status = '0') UND (Tax = 'Ja') UND (Problem = 'beschädigt'), aber Ihre Abfrage schließt auch den Fall aus, wenn Steuer = "Ja" und Problem ist etwas anderes, nicht "beschädigt" –

1

kann nicht nur Sie die eine Abfrage verwenden:

SELECT Reference, DeliveryDate, SecondaryDate, PurchaseId,ItemDescription, Status 
FROM PLAYBOOK 
WHERE (Supplier='PLAY') AND (Status = '0') AND ((Tax <> 'Yes') AND (Problem <> 'damaged')) 
ORDER BY DeliveryDate DESC; 
+0

Gleich mit meiner Antwort: 3 und beantwortet es früh – Sherlock