我有两张桌子:
物品
活动
Item
Item
Item
我想要做的是过滤依赖于Activity
的{{1}}表,例如,返回Item
为Activity
的{{1}}行,如果ItemColour
或Red
或ItemID1
为红色,则表示有意义。
我正在努力做的是让SQL查询的ItemID2
部分正常工作。
ItemID3
以上内容会返回所有WHERE
行,因为我希望在其上放置任何@"SELECT Activity.ID FROM Activity JOIN Item ON Item.ID = (Activity.ItemID1 OR Activity.ItemID2 OR Activity.ItemID3)"
来阻止它返回任何内容。我该如何解决这个问题?
如果我在如何处理这个问题上犯了一个大错,那么我会很乐意改变它。
答案 0 :(得分:1)
您可以使用exists
子句执行此操作:
select a.*
from activity a
where exists (select 1
from item i
where i.itemColor = 'Red' and
i.itemId in (a.itemId1, a.itemId2, a.itemId3)
);
您可以使用您的查询版本执行此操作,但如果三个项目中的多个项目为红色,则可能会出现重复的行:
SELECT a.ID
FROM Activity a JOIN
Item i
ON i.ID IN (a.ItemID1, a.ItemID2, a.ItemID3)
WHERE i.itemColor = 'Red';