SQL Server: используйте левое соединение, чтобы выбрать столбец из двух таблиц как один столбец - PullRequest
0 голосов
/ 20 января 2011

Я пытаюсь создать запрос на выборку, который по существу оставит объединение двух таблиц и отображение одного столбца из каждой таблицы в виде одного столбца.

структура таблицы похожа на:

Таблица:

id, email

таблица b:

id, tablea_id, email

Я пытаюсь получить один столбец электронной почты и электронной почты (в идеале без дубликатов или нулей).

идеальные результаты будут:

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

и возвращаемый адрес электронной почты может быть от a или b.

Может быть, объединение - это то, что будет работать лучше, но я не могу понять, как объединить во второй таблице, основываясь на идентификаторе первой таблицы.

Возможно, при поиске решения у меня плохая формулировка, но я не могу найти никаких примеров.

спасибо за любую помощь.

Ответы [ 4 ]

4 голосов
/ 20 января 2011

Кажется, что вы хотите что-то вроде этого:

SELECT email
FROM TableA
UNION
SELECT B.email
FROM TableA A
JOIN TableB B
ON A.id = B.TableA_id
1 голос
/ 20 января 2011

Если вы просто хотите получить уникальный список адресов электронной почты из любой таблицы, вы можете сделать:

Select email
From TableA
Union
Select email
From TableB

Если вы ищете уникальный список адресов электронной почты из таблицы B и адресов из таблицы A, которые существуют в таблице B, то вы можете сделать:

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
0 голосов
/ 20 января 2011

Это может помочь:

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
0 голосов
/ 20 января 2011

Как насчет этого:

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