Вопрос SQL-оператора - как получить данные из 2 связанных таблиц - PullRequest
1 голос
/ 12 марта 2019

довольно плохо знаком с SQL, у меня есть вопрос, касающийся оператора SQL.

У меня есть фильтр, когда вы выбираете пользователя, он показывает все элементы, касающиеся этого пользователя.Для этого у меня есть таблица с именем TblItem (для которой PK ItemID), и там у меня есть столбец UserID, поэтому получить все элементы с помощью UserID = Selected User довольно просто.

Теперь мне нужночтобы пойти дальше.

У меня есть вторая таблица, которая называется TblItemTask и имеет внешний ключ: ItemTaskItemID, связанный с PK первой таблицы ItemID

Таким образом, каждый элемент может иметь несколько задач, и каждая задача назначается пользователю.

Так что теперь, когда я выбираю пользователя, я не хочу показывать только элементы, касающиеся этого пользователя, я также хочупоказать элементы, которые связаны с другим пользователем, НО есть некоторые задачи, назначенные для выбранного пользователя!

Например, я выбираю пользователя 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, ноон получает только те элементы, в которых идентификатор пользователя задачи соответствует выбранному пользователю, он не отображаетсяЭлементы, связанные с этим идентификатором пользователя:

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 раза в моем списке, и мне это нужнобудет отображаться только один раз, поскольку это один и тот же элемент

РЕДАКТИРОВАТЬ: решено, я использовал INNER JOIN вместо LEFT JOIN, как только я изменил это из своего оператора SQL, все работает правильно!

1 Ответ

1 голос
/ 12 марта 2019

В дополнение к этому левому соединению, я думаю, вам просто нужен подзапрос в предложении 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...