不在子查询中的MariaDB从属子查询

n3ipq98p  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(180)

下面的查询检索表1中的所有行(x:text,y:text),其中列x中的文本还没有出现在表2中。x
给定:

  • 我们使用的是MariaDB;
  • 列x在两个表中都被定义为不可空文本;
  • 没有索引(应用程序是动态的,我们不想使用索引);
  • 我们还需要检索列y(EXCEPT不起作用)。

执行计划总是将内部查询显示为依赖子查询,性能非常差。

SELECT DISTINCT(table1.x), table1.y
FROM table1
WHERE table1.x IS NOT NULL 
AND table1.x  NOT IN (
    SELECT DISTINCT table2.x from table2
    WHERE table2.x IS NOT NULL
)

你能给我一些更好的解决方案吗?
谢谢

xpcnnkqh

xpcnnkqh1#

看看以下内容是否更适合您:

select table1.x, table1.y -- use Distinct only if x & y have duplicates
from table1 t1
where not exists (select * from table2 t2 where t2.x = t1.x);

很明显,如果列不允许NULL,则不需要检查NULL。可能优化器会忽略这一点。

相关问题