У меня есть три запроса, каждый из которых выбирает один и тот же атрибут из одной и той же таблицы и одно и то же предложение WHERE
, но каждый из них объединяется в другой таблице.К сожалению, я не могу создать таблицы в этой базе данных.
Я пытаюсь добиться того, чтобы в результатах не отображались перекрывающиеся результаты между тремя запросами.Другими словами, если запрос 1 и запрос 2 объединены, в результаты должны быть объединены только те результаты из запроса 2, которые не были возвращены в запросе 1.
Пример двух запросов:
SELECT UNIQUE C.color
FROM colors C INNER JOIN markers M ON M.color = C.color
WHERE M.color NOT LIKE 'g%'
AND M.hue NOT LIKE 'b%'
ORDER BY C.color ASC; /*this returns 2744 rows in my db*/
SELECT UNIQUE C.color
FROM colors C INNER JOIN pencils P ON P.color = C.color
WHERE P.color NOT LIKE 'g%'
AND P.hue NOT LIKE 'b%'
ORDER BY C.color ASC; /*this returns 4192 rows in my db*/
Если запрос 1 возвращает: голубой, оранжевый, фиолетовый
И запрос 2 возвращает: золотой, оранжевый, фиолетовый
Тогда я надеюсь получить следующие результаты:Голубой, Золотой, Оранжевый, Фиолетовый (он же УНИКАЛЬНЫЙ модификатор) вместо: Голубой, Золотой, Оранжевый, Оранжевый, Фиолетовый, Фиолетовый
Редактировать: Было предложено использовать UNION
, чтобы объединить два, так как он возвращает разные результаты.Поэтому я внес необходимые изменения в синтаксис, но результаты вернули только 195 строк.Это кажется странным для меня.Я ожидал бы по крайней мере 2744 строки (вывод запроса 1) + любые уникальные значения, возвращаемые из запроса 2, которых еще не было в запросе 1.
Редактировать 2: Nevermind UNION
четко работал!Я делал COUNT
для каждого отдельного запроса без использования DISTINCT
.Спасибо всем, кто ответил с ответом.