我有一个表有2列有时具有相同的值。我想知道如何排除column1的值等于column2中的值的行。
示例:
COL1 | COL2
1 -------- 7
2 -------- 8
3 -------- 2
4 -------- 5
5 -------- 9
这里我将排除第2行和第5行。 感谢
答案 0 :(得分:1)
select
*
from table
where col1 not in (
select
column2
from table
)
答案 1 :(得分:1)
这样的事情应该有效:
SELECT *
FROM yourtable
WHERE COL1 NOT IN (SELECT COL2
FROM yourtable)
答案 2 :(得分:1)
我倾向于避免使用IN作为长值列表,因为它在某些数据库系统上表现不佳。以下选择col1中不存在于col2中的所有值:
SELECT col1
FROM
yourtable t1
LEFT JOIN
yourtable t2
ON
t1.col1 = t2.col2
WHERE
t2.col2 IS NULL
为什么会这样?好吧,通常连接运算符会将具有相同值的行链接在一起。左连接将保留一些不匹配的行(并且它们是我们想要的那些)。左连接采用左侧的表(t1)并将其用作参考表,并开始关联右侧表中的行(在JOIN之后,在本例中为t2)。如果col1值在col2中具有匹配值,则该行将完全填充每个值的值。如果col1中的值与col2没有匹配值,则生成的行上的col2单元格为空/空。因为我们只想知道那些不匹配的值,我们说"其中col2为空"
掌握这一点的另一个技巧是理解同一个表在查询中可以出现两次。我们每次使用它时都会给它一个不同的别名,所以我们可以区分它们。您可以将它设想为在将表格链接在一起之前虚拟制作表格的副本
答案 3 :(得分:0)
将EXCEPT
与相关的子查询一起使用 - 如下所示。
SELECT *
FROM TEST
EXCEPT
SELECT *
FROM TEST
WHERE COL1 IN (
SELECT COL2
FROM TEST
)
答案 4 :(得分:-1)
不确定,但也许......
SELECT t1.*
FROM my_table AS t1
LEFT JOIN my_table AS t2
ON t2.col_b = t1.col_a
WHERE t2.col_b IS NULL