0

次のようなクエリを作成する必要があります。

SELECT DISTINCT Carta_ID
FROM Carta_Alarme
INNER JOIN Alarme ON Carta_Alarme.Alarme_ID = Alarme.ID
WHERE (
YEAR( Alarme.dtOcorrencia ) = 2011
) NOT
IN (

SELECT DISTINCT Carta_ID
FROM Carta_Alarme
INNER JOIN Alarme ON Carta_Alarme.Alarme_ID = Alarme.ID
WHERE (
YEAR( Alarme.dtOcorrencia ) = 2012
)
)

最初の Select の結果は (1, 5, 6) です。「NOT IN」の後の他の選択の結果は(1,2,3,4,5)ですが、合計クエリの結果は(1,2,3,4,5)であり、必要なのは(6)だけです。

だから私が必要とするのは、この選択と私が得るものとの間のEXCEPTですINTERSECTです

4

3 に答える 3

2
SELECT DISTINCT Carta_ID
FROM Carta_Alarme
INNER JOIN Alarme ON Carta_Alarme.Alarme_ID = Alarme.ID
WHERE (
YEAR( Alarme.dtOcorrencia ) = 2011
) AND Carta_ID NOT
IN (

SELECT DISTINCT Carta_ID
FROM Carta_Alarme
INNER JOIN Alarme ON Carta_Alarme.Alarme_ID = Alarme.ID
WHERE (
YEAR( Alarme.dtOcorrencia ) = 2012
)
)
于 2012-12-11T16:57:22.883 に答える
1
SELECT Carta_ID
FROM Carta_Alarme
INNER JOIN Alarme ON Carta_Alarme.Alarme_ID = Alarme.ID
GROUP BY Carta_ID
HAVING sum(YEAR(Alarme.dtOcorrencia) = 2011) > 0 
   and sum(YEAR(Alarme.dtOcorrencia) = 2012) = 0 
于 2012-12-11T16:57:05.483 に答える
0

SQL フィドル

これは実質的にマイナス集合演算です

SELECT DISTINCT ca.Carta_ID
FROM Carta_Alarme ca
INNER JOIN Alarme a ON ca.Alarme_ID = a.ID
left join (SELECT DISTINCT Carta_ID
           FROM Carta_Alarme
           INNER JOIN Alarme ON Carta_Alarme.Alarme_ID = Alarme.ID
           WHERE YEAR( Alarme.dtOcorrencia ) = 2012) ca2 on ca2.Carta_id = ca.Carta_id
WHERE YEAR( a.dtOcorrencia ) = 2011
      and ca2.Carta_id is null
于 2012-12-11T17:20:47.313 に答える