Oracle SQL объединяет не повторяющиеся результаты нескольких запросов - PullRequest
0 голосов
/ 11 октября 2018

У меня есть три запроса, каждый из которых выбирает один и тот же атрибут из одной и той же таблицы и одно и то же предложение 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.Спасибо всем, кто ответил с ответом.

1 Ответ

0 голосов
/ 11 октября 2018

используйте для этого простой союз:

 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*/
union
  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*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...