【发布时间】:2014-07-08 16:35:38
【问题描述】:
如何选择tableB中存在但tableA中不存在的记录(基本上就像tableB-tableA)?
我有以下表格:(每个表格有 100 万条记录)
tableA
id int(11) NOT NULL PRIMARY KEY
name varchar(50)
sku varchar(10) index
description text
tableB
id int(11) NOT NULL PRIMARY KEY
stock int(11)
price int(11)
sku varchar(10) index
注意:sku 已编入索引。
- tableA 和 tableB 在 sku 字段中是一对一的关系。
- 两个表都有 1m 条记录
- 我想获取存在于tableB 但不在tableA 中的记录(基本上它就像tableB - tableA)。 LEFT JOIN 而不是 IN 很糟糕(非常慢)。
有什么替代解决方案?
以下是我尝试过的查询:
LEFT JOIN query:
SELECT a.sku FROM tableA a
LEFT JOIN tableB b
ON a.sku = b.sku
WHERE a.sku is NULL
NOT IN query:
SELECT * from tableB where sku NOT IN (SELECT sku from tableA)
【问题讨论】:
-
你好草莓,我添加了完整的表定义(已编辑问题)
-
id 是主键,两者都是 VARCHAR (10) 抱歉我的错字,让我编辑我的问题
标签: mysql