【发布时间】:2014-05-02 06:21:45
【问题描述】:
我有 2 个带有连接和 where 子句的表。两个表的示例内容:
Id FieldA Id FieldB
1 100 1 Yellow
2 100 2 Green
3 200 3 Green
4 200 4 Blue
5 300 5 Yellow
6 300 6 Orange
我试图返回除 fieldA = 200 AND fieldB = Green 之外的所有内容。因此,它仍应返回具有 fieldA = 100 且 FieldB = Green 的第 2 行。但是,这是我的查询,它不起作用。它排除了所有包含 200 和绿色的行:
select t1.FieldA, t2.FieldB
FROM test1 t1
JOIN test2 t2 ON t1.Id = t2.Id
WHERE (t1.FieldA <> 200 AND t2.FieldB <> 'Green')
在我看来,运行此查询后,唯一排除的行应该是第 3 行,因为它有 fielda = 200 和 fieldb = green,但它只返回第 1 行、第 5 行和第 6 行。在我看来,只有在我使用 OR 时才应该这样做。
让我知道我哪里出错了,这里有一些 DDL,所以你可以玩一下:
create table dbo.test1
(
Id int not null,
FieldA int
)
create table dbo.test2
(
Id int not null,
FieldB varchar(10)
)
INSERT INTO test1 (Id, FieldA)
VALUES
(1,100),
(2,100),
(3,200),
(4,200),
(5,300),
(6,300)
INSERT INTO test2 (Id, FieldB)
VALUES
(1,'Yellow'),
(2,'Green'),
(3,'Green'),
(4,'Blue'),
(5,'Yellow'),
(6,'Orange')
【问题讨论】:
标签: sql tsql where-clause