2012-03-29 6 views
0

最初のテーブルのキーフィールドの1つと一致する別のテーブルに行がある場合、返されるフィールドの1つがyesまたはnoであるクエリを実行する必要があります。 2番目のテーブルが1対多であることを除いて、結合の仕事のように聞こえます。セカンダリテーブルにゼロまたはゼロ以外の数の行があるかどうかを知る必要があります。SQLクエリの選択部分にexists関数を使用できますか?

私はこのような何か行うことができます:

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

を私は可能であれば、集約サブクエリを避けるしたいと思います。 exists()関数を使うことができると言われましたが、選択フィールドでそれを行う方法はわかりません。

これは途中でsybase 15です。

+0

サンプルデータと希望のo/pを投稿できますか? – Teja

答えて

0

ああ、私は...別のstackoverflowのquetionからそれを得た

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

あなたはまだやることができJOIN、このような何か:私はちょうどここに構文を下に書いています

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

かわいい、 "group by id"は、結合の結果として複数の行が表示されないようにするものですか?きちんとしたトリック。 – stu

0

:このクエリ(すべてのデータベースの処理)について

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

方法

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) 
関連する問題