0

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

ID-字
1 - 汤姆
2 - 汤姆
3 - 汤姆
4 - 猫
5 - 汽车
6 - 车
7 - 鹿

我的目标是:

-1st,获得唯一的区分大小写的单词,所以这个 sql 工作正常:

select DISTINCT BINARY(word) from Tb1

-2nd,获取唯一的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)

因为我有 200000 行,所以计算机崩溃了,似乎什么也没返回。那么如何解决我的问题?

4

2 回答 2

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
于 2013-11-15T06:47:57.103 回答
-1

参考问题编号:

16901755

MySQL 上 NOT IN 的替代方案

于 2013-11-15T07:00:07.323 回答