1

我需要帮助来制定查询。我想从表 A 和表 B 中选择所有 DISTINCT 颜色。

这是查询的所需结果:

BLACK
RED
YELLOW
BLUE

我有这些表:

表A

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

但我没有得到所有的颜色。:(

4

5 回答 5

7
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.

于 2012-04-22T23:10:55.180 回答
4
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 结合使用时它是不必要的——我总是倾向于忘记这一点!

于 2012-04-22T23:04:30.337 回答
1

尝试:

SELECT DISTINCT Color
FROM (
    SELECT Color FROM TableA
    UNION ALL
    SELECT Color FROM TableB
) Colors
WHERE NOT Color IS NULL
于 2012-04-22T23:07:25.743 回答
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 Fiddle 是我的网站

于 2012-04-22T23:07:46.933 回答
0
选择不同的颜色
(
    (
        (从颜色不为空的地方选择颜色)
        联盟
        (从 B 中选择颜色,其中颜色不为空)
    ) 作为温度
)

于 2012-04-22T23:27:44.910 回答