SQL语句问题-如何从2个链接表中检索数据

时间:2019-03-12 14:39:59

标签: mysql sql

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语句中更改了它,一切都将正常运行!

1 个答案:

答案 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)