如何选择NOT IN,但考虑到Mysql中的CASE SENSITIVE?

时间:2013-11-15 05:39:44

标签: mysql sql

好的,我有一个简单的表Tb1

ID- Word
1 - Tom
2 - tom
3 - tom
4 - cat
5 - car
6 - CAR
7 - DEER

我的目标是:

-1st,得到唯一的CASE SENSITIVE Word,所以这个sql工作正常:

select DISTINCT BINARY(word) from Tb1

-2,得到唯一的Word(不关心区分大小写),所以使用这个简单的sql

select distinct word from Tb1

第一个查询应显示Tom, tom, cat, car, CAR, DEER(result1)。

第二个查询应显示Tom, cat, car, DEER(result2)。

所以我想要result1减去result2:tom, CAR。所以我试过

select w1 from (select DISTINCT BINARY(word) w1 from Tb1) Tb 
where w1 NOT IN (select DISTINCT word from Tb1)

因为我有20万行,所以计算机崩溃了好像什么都没有回报。那怎么解决我的问题?

2 个答案:

答案 0 :(得分:2)

您需要使用LEFT JOIN -

加入这两个结果
CREATE TABLE tb1 (
  ID INT(11) DEFAULT NULL,
  Word VARCHAR(255) DEFAULT NULL
);

INSERT INTO tb1 VALUES
(1, 'Tom'),
(2, 'tom'),
(3, 'tom'),
(4, 'cat'),
(5, 'car'),
(6, 'CAR'),
(7, 'DEER');

SELECT t1.word FROM
  (SELECT DISTINCT BINARY(word) word from Tb1) t1
  LEFT JOIN (SELECT DISTINCT(word) word FROM tb1) t2
    ON t1.word = t2.word
WHERE t2.word IS NULL

答案 1 :(得分:-1)

提出问题编号:

  

16901755

在MySQL上替代NOT IN