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