2016-06-23 6 views
3

Я просто играя с SQL и хочет, чтобы достичь следующего результата я следующие таблицы:Выберите уникальные значения из одного столбца в двух таблицах

TABLE_1 ID NAME 
      1 CAR 
      2 ANIMAL 
      5 ROCK 

TABLE_2 ID NAME 
      1 GRASS 
      2 ROCKET 
      3 STONE 
      4 DOG 

Я хочу, чтобы мой запрос вернуть уникальные значения идентификатора из обеих таблиц:

ID 
3 
4 
5 

Я пробовал использовать DISTINCT и FULL OUTER JOINS, но безуспешно. Любая помощь будет оценена по достоинству.

ответ

4

Вы можете использовать UNION ALL, группу и использовать в HAVING положение:

SELECT ID FROM (
    SELECT ID FROM Table_1 
    UNION ALL 
    SELECT ID FROM Table_2) 
GROUP BY ID 
HAVING COUNT(*) = 1 
+0

Этот запрос работает очень хорошо. – Grentley

+1

Несмотря на то, что мой ответ работает по запросу, этот один стоит меньше (а также повторяет меньше кода), поэтому, вероятно, это лучший ответ. (+1) – Edu

1

Попробуйте это:

SELECT ID 
FROM (
    SELECT ID 
    FROM TABLE_1 

    UNION ALL 

    SELECT ID 
    FROM TABLE_2) AS t 
GROUP BY ID 
HAVING COUNT(*) = 1 
+1

Это правильный ответ, кто отказался от этого? – sagi

-1
SELECT table_1.id 
FROM table_1 
WHERE table_1.id NOT IN (SELECT table_2.id FROM table_2) 
UNION 
SELECT table_2.id 
FROM table_2 
WHERE table_2.id NOT IN (SELECT table_1.id FROM table_1) 
+2

Не нужно выбирать ** 4 ** раз. – sagi

1
SELECT id FROM table_1 WHERE id NOT IN (SELECT id FROM table_2) 
UNION 
SELECT id FROM table_2 WHERE id NOT IN (SELECT id FROM table_1) 
+0

Пожалуйста, прекратите этот ответ! – sagi

+0

Почему? Верно. Нет дубликатов, потому что id не является IN. – Edu

+0

К сожалению, он возвращает 1, 3, 4, 5 – Grentley

1

Попробуйте это;)

SELECT ID 
FROM(
    SELECT DISTINCT ID FROM TABLE1 
    UNION ALL 
    SELECT DISTINCT ID FROM TABLE2 
) T 
GROUP BY ID 
HAVING COUNT(ID) = 1 

SQLFiddle DEMO

+0

Уже ответил дважды. – sagi

0

Постройте пересечение вручную с помощью UNION. Это легко, если у вас есть уникальное поле в обеих таблицах, например. Код:

SELECT id FROM Table 1 
WHERE id NOT IN (SELECT id FROM Table 2) 

UNION 

SELECT id FROM Table 2 
WHERE id NOT IN (SELECT id FROM Table 1) 
Смежные вопросы