В mysql требуется показывать только уникальные элементы из 2 запросов к 2 таблицам с разными именами столбцов

#php #mysql #duplicates #subquery

#php #mysql #дубликаты #подзапрос

Вопрос:

В mysql требуется показывать только уникальные элементы из 2 запросов к 2 таблицам с разными именами столбцов. Я могу нормально запускать их независимо, но я хочу создать список, который я могу использовать в выпадающем списке в PHP. В настоящее время я извлекаю список для запроса 1, и он работает нормально. Но мне нужно исключить варианты, найденные в запросе 2. Надеюсь, это имеет смысл, это не моя карьера, а всего лишь побочный проект!

Запрос 1 —

 SELECT `driverName` 
FROM `A Drivers` 
WHERE `driverYear` = 2020
  

Запрос 1

Запрос 2 —

 SELECT `driverA` 
FROM `user_picks` 
WHERE `userID` = 1 
and `raceYear` = 2020
  

Запрос 2

Весь запрос 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 делает то, что я ищу. Спасибо!