我想做一个选择它给我一组对象,它们有相同的数据。我的问题是:我选择了
select *
from avi
where codAvi in (select codAVi
from csa
where codEca in (select codEca
from csa
where codAvi =19));
我的问题是,如果我codAvi 19有codEca 1,2,3查询返回所有avi与该codEca并且他返回其他例如avi与codEca 1,2,3,4。
任何想法?
答案 0 :(得分: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
答案 1 :(得分:2)
最里面的查询返回所有CSA行,其中codAvi = 19(可能是2,3,4)。
“中间”查询返回所有CSA行的codAVI值,其中codECA位于第一个结果集中。如果那是2,3,4,那么你得到所有与这些codEca值中的至少一个相关的codAVI,并且这里大概是1,2,3,4(也许codAVI 2和codAVI 1都参考了codEca 2) ?)
因此,最外层的查询可以从表AVI返回1,2,3,4的数据,即使1没有引用codAvi 19。
以下是符合我所见情况的一些示例数据:
CSA
codAvi CodEca
1 2
7 7
19 2
19 3
19 4
AVI
codAVI
1
7
19
答案 2 :(得分: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))