MySql自定义Except子句

时间:2014-02-19 18:30:42

标签: mysql

我的表'Foo'的格式如下,

 ID     Value  
---------------
 1        A  
 2        B  
 3        C  
 4        D  
 5        E 

现在我想查询表格,

SELECT value FROM Foo WHERE value NOT IN ('A','@','C','#','E','$');

因此它会将结果返回为:

Values
----------
 @  
 #  
 $

而不是

Values
----------
 B  
 D

注意:我在表格中有超过3000万条记录。我将在具有不同值的db上连续执行此查询。

2 个答案:

答案 0 :(得分:0)

不完全是你想要的但也许可以接受:

SELECT 
  (CASE WHEN '@' NOT IN (SELECT DISTINCT value FROM foo) THEN 0 ELSE 1 END) at,
  (CASE WHEN '#' NOT IN (SELECT DISTINCT value FROM foo) THEN 0 ELSE 1 END) hash,
  (CASE WHEN '$' NOT IN (SELECT DISTINCT value FROM foo) THEN 0 ELSE 1 END) dollar

如果foo中没有@,没有$,没有#

,则会生成此示例
at   dollar   hash
------------------
0    0        0

答案 1 :(得分:0)

您可以使用要检查的值创建临时表,然后左键加入。

CREATE TEMPORARY TABLE tValues (Value VARCHAR(20));

INSERT INTO tValues (Value) VALUES ('A');
INSERT INTO tValues (Value) VALUES ('@');
INSERT INTO tValues (Value) VALUES ('C');
--etc

SELECT tValues.* 
FROM
  tValues t
  LEFT JOIN Foo f
  ON
    t.Value = f.Value
WHERE
  f.Value IS NULL