关于SQL,我有一个关于SQL语句的问题。
我有一个过滤器,当你选择一个用户时,它会显示关于该用户的所有项目。
为此,我有一个名为TblItem的表(PK是ItemID),其中有一个UserID列,
因此检索所有带有UserID = Selected User的项非常简单。
现在我需要更进一步。
我有第二个表,名为TblItemTask,它有一个外键:ItemTaskItemID,它链接到第一个表的PKItemID
因此每个项目可以有多个任务,并且每个任务都分配给一个用户。
因此,现在当我选择一个用户时,我不想只显示有关该用户的项目,我还想显示链接到另一个用户的项目,但要将一些任务分配给所选用户!
例如,我选择user150,我现在应该显示:

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次,并且我需要它只显示一次,因为它是同一个项目
编辑:
解决了,我使用了内部连接而不是左连接,一旦我从我的SQL语句中更改了它,一切都正常工作了!

最佳答案

除了左连接之外,我认为您只需要在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)

关于mysql - SQL语句问题-如何从2个链接表中检索数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55124182/

10-09 05:55
查看更多