#php #mysql #duplicates #subquery
#php #mysql #дубликаты #подзапрос
Вопрос:
В mysql требуется показывать только уникальные элементы из 2 запросов к 2 таблицам с разными именами столбцов. Я могу нормально запускать их независимо, но я хочу создать список, который я могу использовать в выпадающем списке в PHP. В настоящее время я извлекаю список для запроса 1, и он работает нормально. Но мне нужно исключить варианты, найденные в запросе 2. Надеюсь, это имеет смысл, это не моя карьера, а всего лишь побочный проект!
Запрос 1 —
SELECT `driverName`
FROM `A Drivers`
WHERE `driverYear` = 2020
Запрос 2 —
SELECT `driverA`
FROM `user_picks`
WHERE `userID` = 1
and `raceYear` = 2020
Весь запрос 2 будет существовать в запросе 1. Я не хочу показывать их в своем результате.
Спасибо, Стив
Комментарии:
1. Привет, не совсем понятно, чего ты здесь хочешь. Какого результата вы хотите достичь. Можете ли вы показать нам результат, который вы хотите, предпочтительно НЕ в виде картинки
2. поиск
UNION
и как использовать это в mysql. (т. е. dev.mysql.com/doc/refman/8.0/en/union.html )3. @RiggsFolly — это результат, который я ищу. Клинт Бауэр Коул Кастер Кайл Буш Тай Диллон
4. @Luuk — Я несколько раз пытался включить UNION, прежде чем задавать запрос здесь, но безуспешно.
5. @Steve, ты не привел пример «ты пытался», и ты даже не упомянул, что делал, вот почему я спросил…
Ответ №1:
Вы можете использовать НЕ В
SELECT `driverName`
FROM `A Drivers`
WHERE `driverYear` = 2020
AND `driverName` NOT IN (SELECT `driverA`
FROM `user_picks`
WHERE `userID` = 1
AND `raceYear` = 2020)
Ответ №2:
Я понимаю, что вам нужны имена драйверов из обеих таблиц, без дубликатов. Если это так, вы можете использовать union
:
SELECT `driverName` FROM `A Drivers` WHERE `driverYear` = 2020
UNION
SELECT `driverA` FROM `user_picks` WHERE `userID` = 1 AND `raceYear` = 2020
Это дает вам результирующий набор только с одним вызываемым столбцом driverName
, без дубликатов.
С другой стороны, если вам нужны записи из первого запроса, которые не существуют в результатах второго запроса, вы можете использовать not exists
:
SELECT `driverName`
FROM `A Drivers` ad
WHERE
`driverYear` = 2020
AND NOT EXISTS (
SELECT 1
FROM `user_picks` up
WHERE up.`userID` = 1 AND `up.raceYear` = 2020 and ip.`driverA` = ad.`driverName`
)
Комментарии:
1. NOT EXISTS делает то, что я ищу. Спасибо!