有人可以告诉我这是一个排除吗?
假设tableID是自动生成的,并且在columnY中可以有0或1的值。此语句应排除columnY值为1的所有内容。
SELECT *
FROM [table].[dbo].[one] AS t1
LEFT JOIN [table].[dbo].[one] AS t2
ON (t1.ColumnX = t2.ColumnX AND columnY = 1)
WHERE t1.tableID IS NULL
所以表格看起来像这样:
ID | ColumnX | ColumnY
1 Blue 0
2 Blue 1
3 Red 0
4 Red 0
5 Red 1
答案 0 :(得分:1)
我可以解释......一个与你非常接近的问题。让我改变它:
SELECT *
FROM [table].[dbo].[one] AS t1
LEFT JOIN [table].[dbo].[one] AS t2
ON (t1.ColumnX = t2.ColumnX AND t2.columnY = 1)
WHERE t2.tableID IS NULL
此查询从t1
检索所有行,然后检查t2
(即同一个表)中是否存在具有相同值ColumnX
的行,其中ColumnY
1}}是1。
如果该行不存在,那么它将列出来自t1
的所有行(加上来自t2
的一堆空值)值ColumnX
。但是,如果该行确实存在,那么将排除具有该值ColumnX
的行(因为t2.id IS NOT NULL
)。
Here是一个可以玩的SQLFiddle。
答案 1 :(得分:0)
使用此
SELECT *
FROM [table].[dbo].[one] AS t1
LEFT JOIN [table].[dbo].[one] AS t2
ON (t1.ColumnX = t2.ColumnX) AND (columnY = 1)
WHERE t1.tableID IS NULL
所以表格看起来像这样:
ID | ColumnX | ColumnY
2 Blue 1
5 Red 1
或者你可以使用这个
SELECT *
FROM [table].[dbo].[one] AS t1
LEFT JOIN [table].[dbo].[one] AS t2
ON (t1.ColumnX = t2.ColumnX)
WHERE t2.columnY = 1 AND t1.tableID IS NULL
所以表格看起来像这样:
ID | ColumnX | ColumnY
2 Blue 1
5 Red 1
我希望这会对你有所帮助。谢谢