2016-06-29 12 views
1

im tut eine Abfrage verwenden, die für doppelte Werte überprüft, aber jetzt will ich es das Gegenteil von dieser Abfrage tun:SQL-Abfrage SELECT nicht das Gegenteil

SELECT * FROM orders WHERE buy_date (SELECT buy_date FROM orders GROUP BY buy_date HAVING count(*)>1)

Ergebnis: result

I versucht zu ändern HAVING count(*)=0/HAVING count(*)<1 setzen Sie es zurück nichts

+2

Bearbeiten Sie Ihre Frage und zeigen Sie Ihre erste Anfrage an. Enthalten Sie auch Beispieldaten und gewünschte Ergebnisse. Beachten Sie, dass 'COUNT (*)' mit 'GROUP BY' niemals einen Wert kleiner als 1 zurückgeben kann. –

+0

@GordonLinoff Was wäre das Gegenteil davon? – Firmeza

+1

In SQL fragen Sie nach bestimmten Werten. Es gibt eine eingebaute Funktion, um nach bestimmten Werten zu suchen, die entsprechend "DISTINCT" genannt werden. – Nathan

Antwort

2

Der limitierende Klausel having count(*) < 1 nicht Werte zurückgeben. Sie können ein Re-Cord-Set mit einer halben Zeile nicht zurückgeben! Versuchen Sie HAVING count(*) < 2, die Zeilen mit einer Zählung von 1 zurückgeben.

Sie können auch die DISTINCTfunction überprüfen, die unterschiedliche Werte zurückgibt.

+0

Nur durch das Wechseln zu 'count (*) <2' funktionierte es. Danke – Firmeza

1

Sollte es nicht zählen (*) = 1?

Wenn Sie count (*) = 0 haben, bedeutet dies, dass Sie nur die Datensätze auswählen, die nicht existieren ... also gibt es nichts zurück.

Oder wenn Sie mathematisch korrekt, Negation von sth>1 sein wollen ist sth<=1

2

Ich nehme an, Sie betrachten zwei Aufträge duplizieren mit derselben buy_date und verschiedenen id (Ich nehme an id der Name PK-Feld ist)

Für Duplikat - versuchen Sie dies:

SELECT o1.* 
FROM orders o1 
WHERE EXISTS(
    SELECT 'duplicate' 
    FROM orders o2 
    WHERE o1.id <> o2.id 
    AND o1.buy_date = o2.buy_date 
) 

Für Einzel - versuchen this:

SELECT o1.* 
FROM orders o1 
WHERE NOT EXISTS(
    SELECT 'duplicate' 
    FROM orders o2 
    WHERE o1.id <> o2.id 
    AND o1.buy_date = o2.buy_date 
) 
2

Mit Count> 1 gibt Duplikate zurück, wie Sie sagten. Wenn Count = 1 ist, werden keine Duplikate zurückgegeben.

+0

funktioniert auch danke – Firmeza