SQL Server:使用左连接从两个表中选择一列作为单个列

时间:2011-01-20 20:01:57

标签: sql sql-server left-join

我正在尝试构建一个select查询,该查询基本上会将两个表连接起来,并将每个表中的一列显示为单个列。

表结构类似于:

表a:

id, email

表b:

id, tablea_id, email

我正在尝试获取一列电子邮件和电子邮件(理想情况下没有欺骗或空值)。

理想的结果将是:

one@one.com
two@two.com
three@three.com

并且返回的电子邮件地址可以来自a或b。

也许联盟是最有效的,但我无法根据第一个表的id弄清楚如何在第二个表上建立联合。

在寻找解决方案时,也许我的措辞不好,但我找不到任何例子。

感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

看起来你想要的东西就是这样:

SELECT email
FROM TableA
UNION
SELECT B.email
FROM TableA A
JOIN TableB B
ON A.id = B.TableA_id

答案 1 :(得分:1)

如果您只想从两个表格中获得唯一的电子邮件地址列表,您可以这样做:

Select email
From TableA
Union
Select email
From TableB

如果您正在寻找表B中存在的唯一电子邮件地址列表以及表B中存在的表A中的电子邮件地址列表,那么您可以这样做:

Select TableA.email
From TableA
    Join TableB
        On TableB.TableA_id = TableA.id
Union
Select email
From TableB

根据您的评论,如果您需要表A中的所有行,并且只需要来自表B中表A中存在的行:

Select email
From Table A
Union 
Select TableB.email
From TableB
    Join TableA
        On TableA.id = TableB.TableA_id

答案 2 :(得分:0)

这个怎么样:

SELECT DISTINCT a.email+ ' ' + b.email FROM tableA a LEFT JOIN tableB b on a.Id = b.tablea_Id WHERE b.email IS NOT NULL

答案 3 :(得分:0)

这可能有所帮助:

SELECT
    id, email
FROM
    a

UNION

(
    SELECT
        a.id AS id, b.email AS email
    FROM
        b
    INNER JOIN
        a
    ON
        a.id = b.tablea_id
) b