sql select查询排除某些值

时间:2014-01-02 22:49:15

标签: sql oracle

要求是从搜索中排除ItemA和ItemE,因为它们在columnB中包含值1。

enter image description here

最终结果应该是这样的

enter image description here

我尝试了SELECT * FROM my_table WHERE ColumnB not like '1',但这只是删除了包含1的行,我希望将整个ITEM A / ITEM E作为包含值1删除。

4 个答案:

答案 0 :(得分:3)

尝试:

SELECT *
FROM tablee
WHERE ColumnA NOT IN (
  SELECT columnA FROM tablee
  WHERE columnB = 1
);

SELECT *
FROM tablee t1
WHERE NOT EXISTS(
  SELECT 1 FROM tablee t2
  WHERE t2.columnB = 1 and t1.columnA = t2.columnA
);

答案 1 :(得分:2)

首先,我们创建一个查询ColumnB ='1'的行的子查询。然后我们将匹配ColumnA名称的子查询连接到我们的主表。在ColumnB中具有不同行和“1”的项目现在将具有值,由于左连接,其他行将仅具有NULL。然后我们使用where来查找没有匹配的那些。

SELECT main.* from my_table AS main
LEFT JOIN (
    SELECT * FROM my_table 
    WHERE ColumnB = '1' 
    ) AS remove
ON remove.ColumnA = main.ColumnA
WHERE remove.ColumnB != '1'

要了解有关sql的更多信息,请参阅w3schools

的入门读物

答案 2 :(得分:0)

感谢您的帮助。我提出了解决方案

select * 
from test 
where columnA not in  (select columnA from test where ColumnB = 1 )

http://sqlfiddle.com/#!4/e0f07/2

答案 3 :(得分:0)

试试这个

select * from my_table where ColumnA!=ItemA and ColumnA!=ItemE;