SQL Join на двух столбцах, где равны на 1 и не равны на других - PullRequest
0 голосов
/ 18 января 2012

Как я могу объединить 2 разные таблицы на 2 столбца, где один столбец равен, а другой нет. В приведенном ниже примере мне нужно запросить записи, в которых совпадает электронная почта, а NID - нет.

Table A
ID              NID                  Email
1               bob                  bob@asdf.com
2               mike                 mike@asdf.com
3               dave                 dave@asdf.com

Table B
ID              NID                  Email
1               bob                  bob@asdf.com
2               mike                 mike@asdf.com
3               doug                 dave@asdf.com

Пример вывода должен быть из таблицы B:

ID              NID                  Email

3               doug                 dave@asdf.com

Бонусные баллы, если вы можете сделать это в LINQ to Entities

Ответы [ 3 ]

3 голосов
/ 18 января 2012
SELECT *
FROM TableA JOIN TableB ON TableA.Email = TableB.Email
WHERE TableA.NID <> TableB.NID
1 голос
/ 18 января 2012
CREATE TABLE #TableA
(
    ID int,
    NID varchar(25),
    Email varchar(50)
)

CREATE TABLE #TableB
(
    ID int,
    NID varchar(25),
    Email varchar(50)
)

INSERT INTO #TableA(ID, NID, Email) VALUES (1, 'bob', 'bob@asdf.com')
INSERT INTO #TableA(ID, NID, Email) VALUES (2, 'mike', 'mike@asdf.com')
INSERT INTO #TableA(ID, NID, Email) VALUES (3, 'dave', 'dave@asdf.com')

INSERT INTO #TableB(ID, NID, Email) VALUES (1, 'bob', 'bob@asdf.com')
INSERT INTO #TableB(ID, NID, Email) VALUES (2, 'mike', 'mike@asdf.com')
INSERT INTO #TableB(ID, NID, Email) VALUES (3, 'doug', 'dave@asdf.com')

SELECT 
    #TableB.ID, 
    #TableB.NID, 
    #TableB.Email
FROM 
    #TableB Inner Join #TableA
    ON #TableA.ID = #TableB.ID WHERE #TableA.NID <> #TableB.NID

DROP TABLE #TableA
DROP TABLE #TableB

Результат:

3 Дуг Дэйв@asdf.com


В заключение просто соединение с условием WHERE
SELECT 
    TableB.ID, 
        TableB.NID, 
        TableB.Email
FROM 
        TableB 
Inner Join 
        TableA
ON TableA.ID = TableB.ID WHERE TableA.NID <> TableB.NID
0 голосов
/ 18 января 2012

Это должно работать:

SELECT A.*, B.*
FROM TableA A FULL OUTER JOIN
     TableB B ON A.Email = B.Email
             AND A.NID <> B.NID
;

Непонятно, хотите ли вы только A записи, только B записи или оба. Вы бы изменили тип SELECT и JOIN в зависимости от того, какие данные вы ожидаете.

Это решает вопрос так, как вы его описали, но если вы запустите его для таблиц, содержащих ваши примеры данных, вы получите пустой набор результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...