SQL Select, соответствует одному столбцу, но не другому - PullRequest
4 голосов
/ 01 апреля 2011

У меня есть две таблицы в базе данных SQL Server 2008 R2, давайте назовем их A и B. Они выглядят так

A
--------------------
GUID     Primary Key
B_GUID   Foreign Key
Value    nvarchar(50)

B
--------------------
GUID     Primary Key
Value    nvarchar(50)

Я хочу выбрать все строки из A, где

  • B_GUID в A соответствует GUID в B
  • Значение в A не соответствует Value в B

Однако я не могу понять SQL. Любая помощь? :) Спасибо

Ответы [ 4 ]

5 голосов
/ 01 апреля 2011

Как насчет:

SELECT A.*
FROM dbo.A
INNER JOIN dbo.B ON A.B_GUID = B.GUID
WHERE
    A.Value <> B.Value

INNER JOIN сопоставляет две таблицы вместе на равенство этих двух столбцов, а предложение WHERE ограничивает его только двумя строками, к которым применяется это условие.

3 голосов
/ 01 апреля 2011
select 
  A.*
from
  A
join
  B on A.B_GUID = B.GUID and A.Value <> B.Value
0 голосов
/ 04 марта 2013

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

TABLE 1     
GUID    B_GUID  VALUE
101 201 X
102 201 Y

TABLE2      
GUID    VALUE   
201 Y   
201 X   

Один альтернативный способ решить эту проблему - использовать запрос предложения EXCEPT.

0 голосов
/ 01 апреля 2011
SELECT * 
FROM A 
LEFT JOIN B
ON A.B_GUID = B.GUID  WHERE A.Value <> B.Value;

Это не проверено, но должно работать

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