SQLite查询问题所在

时间:2014-05-14 22:03:41

标签: sql sqlite

我有两张桌子:

物品

  • ID - 主键
  • ItemName - 字符串 - 项目名称
  • ItemColour - String - 项目颜色
  • ItemWeight - int - 项目重量

活动

  • ID - 主键
  • ActivityName - 字符串 - 活动名称
  • ItemID1 - Item
  • 中行的主键
  • ItemID2 - Item
  • 中行的主键
  • ItemID3 - Item
  • 中行的主键

我想要做的是过滤依赖于Activity的{​​{1}}表,例如,返回ItemActivity的{​​{1}}行,如果ItemColourRedItemID1为红色,则表示有意义。

我正在努力做的是让SQL查询的ItemID2部分正常工作。

ItemID3

以上内容会返回所有WHERE行,因为我希望在其上放置任何@"SELECT Activity.ID FROM Activity JOIN Item ON Item.ID = (Activity.ItemID1 OR Activity.ItemID2 OR Activity.ItemID3)" 来阻止它返回任何内容。我该如何解决这个问题?

如果我在如何处理这个问题上犯了一个大错,那么我会很乐意改变它。

1 个答案:

答案 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';