-1

同じデータを持つオブジェクトのグループが返されるという選択を実行したいと思います。私の問題はこれです:私は選択しました

select * 
from avi
where codAvi in (select codAVi 
                 from csa 
                 where codEca in (select codEca 
                                  from csa 
                                  where codAvi =19));

私の問題は、i codAvi19にcodEca1,2,3があり、そのクエリがそのcodEcaですべてのaviを返し、他のavi、たとえばcodEca1,2,3,4で他のaviを返す場合です。

何か案が?

4

3 に答える 3

2

実際にどのデータが必要かわかりません。いくつかのサンプルデータと、出力に期待するものが役立ちます。

これが結合を使用したクエリです。これにより、ロジックがより明確になりますか?

select * 
from avi
join csa as csa1 on avi.codAvi = csa1.codAvi
join csa as cas2 on csa1.codEca = csa2.codEca
where csa2.codAvi = 19
于 2012-07-05T13:12:43.937 に答える
2

最も内側のクエリは、codAvi = 19(おそらく2、3、4)であるすべてのCSA行を返します。

「中央」クエリは、codECAが最初の結果セットに含まれるすべてのCSA行のcodAVI値を返します。それが2、3、4の場合、これらのcodEca値の少なくとも1つに関連するすべてのcodAVIを取得します。ここでは、おそらく1、2、3、4です(おそらく、2のcodEcaはcodAVI2とcodAVI1の両方によって参照されます) ?)

したがって、1にcodAvi 19への参照がない場合でも、最も外側のクエリは1、2、3、4のテーブルAVIからデータを返す可能性があります。


これが私が見る状況に合ういくつかのサンプルデータです:

CSA
codAvi  CodEca
  1       2
  7       7
 19       2
 19       3
 19       4


AVI
codAVI
  1
  7
 19
于 2012-07-05T13:15:37.510 に答える
0

最後に私はそれを使用します:

SELECT * FROM avi where codAvi in (SELECT e.codAVi FROM csa e WHERE e.codEca IN (SELECT c.codEca FROM csa C WHERE  c.codAvi = 19) GROUP BY e.codAvi HAVING COUNT(*) = (SELECT COUNT(*) FROM csa a WHERE a.codAvi  = 19))
于 2012-07-06T06:30:54.380 に答える