gpt4 book ai didi

mysql - 从两个表(tableS - tableS)中选择剩余记录

转载 作者:行者123 更新时间:2023-11-30 00:14:40 24 4
gpt4 key购买 nike

如何选择表B中存在但表A中不存在的记录(基本上就像表B - 表A)?

我有以下表格:(每个表有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 已编入索引。

  1. tableA 和 tableB 在 sku 字段中具有一对一的关系。
  2. 两个表都有 100 万条记录
  3. 我想获取 tableB 中存在但 tableA 中不存在的记录(基本上就像 tableB - tableA)。 LEFT JOIN 和 NOT 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)

最佳答案

我认为最好的解决方案是左连接或:

select *
from tableB b
where not exists (select 1 from tableA where a.sku = b.sku);

not in 解决方案的问题在于,tableA 中的 NULL 值将导致查询中不返回任何行。

为了提高性能,您需要在 tableA(sku) 上建立索引:

create index tableA_sku on tableA(sku);

这将加快左连接不存在版本的速度。

关于mysql - 从两个表(tableS - tableS)中选择剩余记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23759398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com