2012-04-22 4 views
1

Мне нужна помощь для формулировки запроса. Я хочу, чтобы выбрать все различные цвета из таблицы А и В. ТаблицаSQL-JOIN два столбца из двух таблиц

Это полезный результат из запроса:

BLACK 
RED 
YELLOW 
BLUE 

У меня есть эти таблицы:

СТОЛ

ID NAME COLOR 
5 SOCKS BLACK 
4 SOCKS RED 

ТАБЛИЦА B

ID NAME COLOR 
0 CAR BLUE 
1 BIKE BLUE 
5 TRUCK YELLOW 
10 PLANE NULL 

Я пробовал:

SELECT DISTINCT A.color FROM A JOIN B ON b.color 

Но я не получаю все цвета. :(

+0

Ваш синтаксис соединения неверен. Между таблицей a и таблицей b нет никакой связи. Вам нужно «UNION» набор кортежей в один набор кортежей. См. Мой ответ. – JonH

+0

Да, вы правы. Я забыл о UNION: (( – mrjasmin

+0

, если вы решили проблему, ПРИНИМАЙТЕ ответ, чтобы мы могли отметить этот вопрос как ЗАКРЫТО). – JonH

ответ

6
SELECT color FROM A 
UNION 
SELECT color FROM B 
WHERE color IS NOT NULL -- only filters NULL from B 
ORDER BY color   -- sorts all rows 

UNION (вместо UNION ALL) удаляет дубликаты. Нет необходимости в дополнительных подзапросах или DISTINCT.

+0

Я думаю, что это не приведет к удалению нулей, исходящих из 'TableA' –

+1

@ypercube: Это правильно, но специально. В примере используется только значение «NULL» в таблице «B». Чтобы фильтровать 'NULL' из обеих таблиц, добавьте одно и то же предложение WHERE в таблице' A'. [Рабочая демонстрация] (http://sqlfiddle.com/#!2/b2c71/1). –

3
SELECT 
    A.Color FROM TableA A 
WHERE A.Color IS NOT NULL 
UNION 
SELECT 
    B.Color FROM TableB B 
    WHERE B.Color IS NOT NULL 

я удалил DISTINCT, потому что это не нужно, если сочетать его с UNION - Я всегда, как правило, забывают об этом !.

1

Try:

SELECT DISTINCT Color 
FROM (
    SELECT Color FROM TableA 
    UNION ALL 
    SELECT Color FROM TableB 
) Colors 
WHERE NOT Color IS NULL 
+0

Большое спасибо. Но как я могу удалить все значения NULL? – mrjasmin

+0

Добавить предложение where (см. Edit) –

+0

Я решил это. Я использовал ГДЕ НЕ НУЛЬНО :)) THunk you – mrjasmin

1

http://sqlfiddle.com/#!2/0de4d/5

SELECT distinct 
    COLOR 
FROM 
    (
     select color from TableA 
     UNION 
     select color from TableB 
    ) tmp 
WHERE color IS NOT NULL 
order by color 

отредактировал, чтобы удалить нули

Полное раскрытие - SQL Скрипки мой сайт

+0

Я ** люблю ** ваш сайт sqlfiddle, кстати! :) –

+0

@ErwinBrandstetter спасибо! –

0
 
SELECT DISTINCT color FROM 
(
    (
     (SELECT color FROM A WHERE color IS NOT NULL) 
     UNION 
     (SELECT color FROM B WHERE color IS NOT NULL) 
    ) AS temp 
)