Я пытаюсь написать запрос, который будет отображать идентификаторы, в таблице которых нет определенных данных. В настоящее время мы пытаемся найти людей, которые принадлежат определенной таблице, но у которых отсутствуют данные.
Например, мы хотим убедиться, что у всех есть все три этих предмета.
item_ID
item_1
item_2
item_3
И у нас есть эта таблица ниже
ID .. item_ID
1 .. item_1
1 .. item_2
1 .. item_3
2 .. item_1
2 .. item_2
3 .. item_1
И так далее. Вы можете видеть, что ID 2 отсутствует в их таблице item_3, и я хочу вытащить кортеж, который отображает 2, item_3 в запросе.
Пока у меня есть что-то вроде этого
SELECT DISTINCT b.ID, a.item
FROM TABLE1 a
LEFT OUTER JOIN TABLE2 b
ON a.ITEM_ID=b.ITEM_ID
WHERE b.ITEM_ID is NULL
Я пытался написать что-то, где я могу вытащить item_ID, некоторые идентификаторы отсутствуют, но пока ничего не работает.
Если я хорошо понимаю, вы пытаетесь получить данные из таблицы 1, где идентификаторы элементов отсутствуют в таблице 2, и связать каждый из них с правильным идентификатором в таблице 2. Может быть, мне нужна дополнительная информация, но поиск отсутствующих идентификаторов элементов в таблице 2 - это довольно просто, но я не могу понять, как вы можете связать отсутствующие идентификаторы элементов с правильным идентификатором в таблице 2 после. Как вы узнаете, что элемент 3 связан с идентификатором 2 в таблице 2 в качестве примера? Чтобы сделать запрос, вы должны сначала ответить на этот вопрос.
Привет. Что означает «нет определенных данных в их таблице»? В каких случаях в идентификаторе «отсутствуют» некоторые данные? Когда в нем нет строки со значением из таблицы 1? Вы четко не объясняете, что хотите, и не показываете пример ввода с желаемым результатом. Вы просто даете запрос неправильный. Прочтите и действуйте в соответствии с минимальный воспроизводимый пример.






Если у вас есть полный список идентификаторов в таблице 2, вы можете использовать его, но если у вас его нет, вы можете использовать это:
SELECT ft.*
FROM TABLE2 t2 RIGHT OUTER JOIN
(SELECT b.ID, a.ITEM_ID
FROM TABLE1 a
CROSS JOIN (SELECT DISTINCT ID FROM TABLE2) b) ft
ON t2.id = ft.id AND t2.item_id = ft.item_id
WHERE t2.id IS NULL
http://sqlfiddle.com/#!9/2d0a19/7
Я делаю CROSS JOIN, чтобы получить список всех возможных комбинаций, а затем выбираю недостающие из таблицы.
OP, возможно, захочет принять к сведению, что никто никогда не использует RIGHT JOIN - альтернатива, которая обычно считается более простой для понимания людьми: sqlfiddle.com/#!9/2d0a19/8
SELECT a.ID, b.item_id
FROM (SELECT DISTINCT ID FROM Table2) AS a
-- or TableX AS a -- if you have a TableX with the unique ID values used for Table2
CROSS JOIN Table1 AS b
-- or (SELECT DISTINCT item_id FROM Table2) AS b -- if Table1 was not available
LEFT JOIN Table2 AS c ON a.ID = c.ID AND b.item_id = c.item_id
WHERE c.ID IS NULL
;
Разве в строке 6 не будет b.item_id вместо a.item_id?
@MatthewI Пожалуйста, подумайте о том, чтобы щелкнуть значок галочки, чтобы «принять» этот ответ, чтобы показать, что он является наиболее полезным. И вы, и отвечающий также получаете очки репутации.
Ссылается ли table2.ID на другую таблицу?