2012-07-05 60 views
-1

我想做一個選擇,它返回一組對象,它們具有相同的數據。我的問題是這樣的:我有選擇限制選擇中的出現

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用於查詢與codEca返回所有的AVI他與codEca 1,2回別人例如AVI, 3,4。

任何想法?

回答

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)) 
+0

這對我來說沒有任何意義。 – Hogan 2012-07-06 20:07:05

+0

我搜索的所有avi都有與我通過的avi相同的codEca。 – Xavier 2012-07-09 07:45:55

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 
2

最裏面的查詢返回codAvi = 19(大概是2,3,4)的所有CSA行。

「中間」查詢返回codECA位於第一個結果集中的所有CSA行的codAVI值。如果這是2,3,4,那麼你得到所有與至少一個這些codEca值有關的codAVI,並且在這裏可能是1,2,3,4(也許codAca 2被codAVI 2和codAVI 1 ?)

就這樣,在最外層查詢可以爲1,2,3,4返回從表AVI數據,即使1不具有參考codAvi 19


下面是一些樣本數據適合這種情況我見:

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


AVI 
codAVI 
    1 
    7 
19