我有两个表:
表一:
Item_Number EVENT_ID
表乙:
EVENT_ID EVENT_TYPE_ID
该EVENT_ID
s为独特的,他们是在两个表是相同的。EVENT_TYPE_ID
具有从 1 到 100 的不同值。但我只对 EVENT_TYPE_ID=40 和 EVENT_TYPE_ID=41 感兴趣。所以我使用内连接来挑选那些只有 EVENT_TYPE_ID=40 或 EVENT_TYPE_ID=41 的项目。
SELECT
ITEM_NUMBER, EVENT_TYPE_ID
FROM
A
INNER JOIN
B ON A.EVENT_ID = B.EVENT_ID
WHERE
EVENT_TYPE_ID = 40 or EVENT_TYPE_ID = 41
我得到了一些这样的结果:
Item_Number Event_Type_ID
-----------------------------
1004 40
1019 41
1002 41
1109 40
1004 41
1004 40
1019 40
1002 41
1109 40
这些Item,有的只有type=40的事件,有的只有type=41的事件,有的同时有40和41类型的事件。现在我想挑选那些只有事件类型 40 或 41,但没有这两个事件的项目。我应该如何编写查询?
我建议使用GROUP BY
and更简单的解决方案COUNT
:
SELECT ITEM_NUMBER, COUNT(ITEM_NUMBER) COUNT_ITEM_NUMBER
from A
INNER Join B ON A.EVENT_ID=B.EVENT_ID
WHERE EVENT_TYPE_ID IN (40, 41)
GROUP BY ITEM_NUMBER
HAVING COUNT(ITEM_NUMBER) = 1;
如果您想知道记录上的 EVENT_TYPE_ID,您可以在此之后进行另一个连接,例如
SELECT GROUPED.ITEM_NUMBER, B.EVENT_TYPE_ID
FROM (
SELECT ITEM_NUMBER, COUNT(ITEM_NUMBER) COUNT_ITEM_NUMBER
from A
INNER Join B ON A.EVENT_ID=B.EVENT_ID
WHERE EVENT_TYPE_ID (40, 41)
GROUP BY ITEM_NUMBER
HAVING COUNT(ITEM_NUMBER) = 1 ) GROUPED
INNER Join B ON GROUPED.EVENT_ID=B.EVENT_ID
WHERE EVENT_TYPE_ID (40, 41)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句