2010-11-18 12 views
2

Ich habe eine SQL-Abfrage, die ich immer nur 1 Zeile zurückgeben möchte. Wenn mehrere Zeilen vorhanden sind, möchte ich null zurückgeben.SQL Server gibt nur eine Zeile oder Null zurück

Ich glaube, ich es mit etwas tun kann, wie

SELECT whatever FROM MyTable 
WHERE something = myQuery 
    AND (COUNT(SELECT whatever FROM MyTable 
      WHERE something = myQuery) = 1) 

aber das ist ziemlich böse und ich fragte mich, ob es als ordentliche Art und Weise tun.

Antwort

4

Cant Sie tun:

SELECT whatever FROM 
    (
     SELECT whatever, COUNT(*) As NumRecords 
     FROM MyTable 
     WHERE something = myQuery 
     GROUP BY whatever 
     HAVING NumRecords = 1 
    ) 
+1

+1 für jeden, aber ich denke, das ist die sauberste – fearofawhackplanet

+0

sehr schön. KISS ist immer besser. –

1

Sie eine IF-Klausel verwenden, können für eine einzelne Zeile zu überprüfen und nur wählen, wenn das der Fall ist:

IF SELECT COUNT(*) FROM MyTable WHERE something = myQuery) = 1 
    BEGIN 
    SELECT whatever FROM MyTable 
    WHERE something = myQuery 
    END 
+0

ich bin verwirrt - das ist nur seine ursprüngliche Abfrage mit einem IF am Anfang? EDIT: sah nur Ihre Bearbeitung, :) – RPM1984

+0

immer noch zwei Abfragen benötigt - nicht erforderlich (IMO) – RPM1984

+0

@ RPM1984 - Ihre Version ist in der Tat eine einzelne Abfrage, aber wenn mehrere Spalten zurückgegeben werden sollen ... – Oded

1

Nun kann eine andere Art und Weise sein:

select f1, f2, f3 
    from your_table 
where f4 = f5*2 
group by f1, f2, f3 
having count(1) = 1 

Ich weiß nicht, ob es besser als Ihre Lösung ist.

0

Satz rowcount 1

Vor der select-Anweisung.

Später

Satz rowcount 0

0

Wir können es auch auf diese Weise hinzufügen,

SELECT max(whatever) as whatever 
FROM MyTable 
WHERE something = myQuery 
HAVING COUNT(*) = 1 
Verwandte Themen