2012-03-29 3 views
0

Ich muss eine Abfrage ausführen, bei der eines der zurückgegebenen Felder ein Ja oder Nein ist, wenn eine Zeile in einer anderen Tabelle mit einem der Schlüsselfelder in der ersten Tabelle übereinstimmt. Klingt wie ein Job für Join, außer die zweite Tabelle ist eins zu viele und ich muss nur wissen, ob es Null oder eine nicht Null Anzahl von Zeilen in der sekundären Tabelle gibt.Kann ich die Funktion exists im ausgewählten Teil einer SQL-Abfrage verwenden?

Ich könnte so etwas tun:

select t1.name, t1.id, (select count(1) from t2 where t1.id=t2.id) from t1 

aber ich möchte sie ein Aggregat Unterabfrage wenn möglich zu vermeiden. Es wurde mir gesagt, dass ich die Funktion exists() verwenden könnte, aber ich sehe nicht, wie das in einem Auswahlfeld zu tun ist.

Dies ist übrigens sybase 15.

+0

Können Sie einige Beispieldaten und gewünschten o/p? – Teja

Antwort

0

ahhh, bekam ich es von einem anderen Stackoverflow quetion ...

case when exists (select * from t2 where t1.id = t2.id) then 1 else 0 end 
1

Sie noch dergleichen diese JOIN, etwas tun könnte:

SELECT t1.name, t1.id, CASE WHEN t2.id IS NULL THEN 0 ELSE 1 END Existst2 
FROM t1 
LEFT JOIN (SELECT id FROM t2 GROUP BY id) t2 
ON t1.id = t2.id 
+0

niedlich, die "Gruppe nach ID" ist, was verhindert, dass mehrere Zeilen als Folge der Join erscheinen? Ordentlicher Trick. – stu

0

ich die Syntax hier nur am aufzuschreiben:

if exists (select * from table1 t1 inner join table1 t2 on t1.id = t2.id) 
    select * from table2 
0

Wie wäre es mit dieser Abfrage (Arbeiten mit allen Datenbanken)

select t1.name, t1.id, 'Y' as HasChild 
from t1 
where exists (select 1 from t2 where t2.id = t1.id) 
UNION 
select t1.name, t1.id, 'N' as HasChild 
from t1 
where NOT exists (select 1 from t2 where t2.id = t1.id)