SQL的新内容,我对SQL语句有疑问。
我有一个过滤器,当您选择一个用户时,它将显示与该用户有关的所有项目。
为此,我有一个名为TblItem
的表(PK为ItemID
),并且有一个UserID列,
因此使用UserID = Selected User
检索所有项目非常简单。
现在我需要更进一步。
我有一个名为TblItemTask
的第二个表,该表具有一个外键:ItemTaskItemID
,该表链接到第一张表ItemID
的PK
因此每个项目可以有多个任务,并且每个任务都分配给一个用户。
因此,现在选择用户时,我不仅要显示与该用户有关的项目,而且还希望显示链接到另一个用户的项目,但是必须将一些任务分配给所选用户!
例如,我选择用户150
,我现在应该显示以下内容:
Item 1 with UserID = 150;
Item 2 with UserID = 150;
Item 3 with UserID = 220;
在此示例中,Item 3
具有分配给UserID = 150
的任务,这就是必须显示该任务的原因
这些是表格:
TblItem = [ItemID (PK), ItemDescription, ItemUserID]
TblItemTask [TaskID (PK), ItemTaskItemID (FK), ItemTaskUserID]
我尝试了此SQL,但它仅检索任务的UserID与所选用户匹配的项目,它不显示链接到该UserID的项目:
SELECT DISTINCT
ItemID,
ItemDescription,
ItemUserID
FROM
dbo.TblItem
INNER JOIN dbo.TblItemtask ON
ItemID = ItemtaskItemID
WHERE ItemUserID = [user_selected_my_items] OR ItemTaskUserID = [user_selected_my_items]
我必须添加DISTINCT
,因为如果某个项目具有分配给用户的4个任务,则该项目将在我的列表中显示4次,并且由于它是同一项目,我只需要显示一次< / p>
编辑: 解决了,我使用INNER JOIN而不是LEFT JOIN,一旦从SQL语句中更改了它,一切都将正常运行!
答案 0 :(得分:1)
除了左连接之外,我认为您只需要在where子句中使用子查询...
SELECT DISTINCT
ItemID,
ItemDescription,
ItemUserID
FROM
dbo.TblItem
LEFT JOIN dbo.TblItemtask ON
ItemID = ItemtaskItemID
WHERE ItemUserID = [user_selected_my_items] OR ItemID in (Select itemTaskItemID from tblitemtask)