-1

我想做一个选择,它返回一组具有相同数据的对象。我的问题是:我有选择

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

我的问题是,如果我 codAvi 19 有 codeEca 1,2,3,该查询返回所有带有该 codEca 的 avi,而他返回其他人,例如带有 codeEca 1,2,3,4 的 avi。

任何想法?

4

3 回答 3

2

I'm not sure what data you actually want. Some example data and what you expect the output to be would help.

Here is your query using joins, maybe this makes the logic clearer for you?

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 行。

“中间”查询返回第一个结果集中 codeECA 所在的所有 CSA 行的 codAVI 值。如果是 2,3,4,那么您将获得与这些 codEca 值中的至少一个相关的所有 codAVI,这里大概是 1,2,3,4(也许 codAVI 2 和 codAVI 1 都引用了 2 的 codEca ?)

因此,最外层的查询可以从表 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
于 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 回答