2016-08-04 48 views
1

In unserer Datenbank haben wir eine Gruppe von Bestellungen, die an Benutzerzahlen gebunden sind. Ich muss alle Datensätze, die sich auf eine bestimmte Benutzernummer beziehen, nur so lange ziehen, wie die spezifische Elementnummer derzeit nicht mit der Benutzernummer verknüpft ist.Unterabfrage zur Rückgabe von Zeilen unter der Bedingung, dass kein Wert vorhanden ist

Wenn ich finde, dass die Benutzernummer/Artikelnummer in einer Zeile vorhanden sind, muss ich null zurückgeben.

Wenn die Benutzernummer/Artikelnummer Combo nicht existiert, muss ich die höchste Artikelnummer zurückgeben.

Unten ist meine beste Schätzung zu dieser Unterabfrage. Meine SQL-Kenntnisse sind zu diesem Zeitpunkt ziemlich rostig, würde jede Hilfe zu schätzen wissen.

SELECT 
    max(itemNumber) 
FROM 
    orders 
WHERE 
    userNum = 12 IN 
    ((SELECT 
     itemNumber 
    FROM 
     orders 
    WHERE itemId = 27) IS NULL) 
+4

können Sie einige Beispieldaten und das erwartete Ergebnis zeigen? wie erklärt, ist die Frage ein wenig unklar. –

+0

Bitte setzen Sie einige Beispieldaten und erwartete Ausgabe , b Da viele der SO-Benutzer nicht so gut in Englisch sind, könnte es für solche Benutzer schwierig sein, Ihre Formulierung sehr klar zu konzipieren. – Sami

Antwort

1

Versuchen Sie folgendes:

SELECT max(itemNumber) 
FROM 
orders 
WHERE 
userNum IN 
    ((SELECT itemNumber 
    FROM orders 
    WHERE itemId = 27 AND userNum = 12) IS NULL) 
+0

Perfekt, das hat funktioniert, danke! Wäre es möglich, eine kleine Erklärung zu einem Referenzmaterial zu bekommen, um zu erklären, was hier vor sich geht? – NealR

0

Ihre Anfrage ist unklar und falsch: WHERE userNum = 12 IN...

wenn ich es gut bekommen, ist dies eine Probe Logik ist, können Sie es testen.

SELECT 
    IF(EXISTS (SELECT * FROM orders WHERE itemId = 27), NULL, MAX(itemNumber)) 
FROM 
    orders 
WHERE 
    userNum = 12 
0

Bitte überprüfen This sample on sqlfiddle Hoffe, dass es, was Sie für

SELECT 
    itemNumber, userNum 
FROM 
    orders 
where userNum is not null 
union 
SELECT 
    max(itemNumber) as itemNumber, null 
FROM 
    orders 
where userNum is null 

Hinweis suchen gibt: Wenn es nicht korrekt ist, können Sie bitte die Beispieldaten, oder teilen Sie uns die andere erwartete Ergebnis ändern, würde ich seien Sie froh, die Frage zu ändern, um Ihre Anforderung zu erfüllen :(die noch nicht sehr klar ist