除MySQL之外的替代方案

时间:2017-10-22 08:28:15

标签: mysql sql

我必须在MySQL中编写这样的查询:

SELECT * 
FROM Tab1
EXCEPT
SELECT * 
FROM Tab1 
WHERE int_attribute_of_Tab1>0

但MySQL并不支持关键字 EXCEPT 。 是否有标准模式正确使用另一个模拟MySQL中的except的运算符?

3 个答案:

答案 0 :(得分:9)

您可以使用NOT IN

SELECT * 
FROM Tab1
WHERE id  NOT IN (
    SELECT id 
    FROM Tab1 
    WHERE int_attribute_of_Tab1>0
)

答案 1 :(得分:1)

试试这个

SELECT * 
FROM Tab1
WHERE [....] NOT EXISTS 
(SELECT * 
FROM Tab1 
WHERE int_attribute_of_Tab1>0) 

答案 2 :(得分:0)

几个定义 SqlServer https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql除外 返回EXCEPT运算符左侧的查询中的任何不同值,这些值也不是从右侧查询返回的。 PLsql https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htm MINUS 语句将结果与MINUS运算符组合在一起,后者仅返回第一个查询返回的唯一行,但不返回第二个

返回的唯一行

对mysql的迂腐翻译将是

 SELECT distinct t1.* 
FROM Tab1 as t1
left outer join
(SELECT * 
FROM Tab1 
WHERE int_attribute_of_Tab1>0) as t2 on t1.id = t2.id
where t2.id is null;

假设有一个id列,我不想在很多列上使用distinct。