gpt4 book ai didi

Mysql 子选择替代方案

转载 作者:行者123 更新时间:2023-11-29 15:10:11 26 4
gpt4 key购买 nike

我有一个查询,我知道可以使用子选择来完成,但由于表大小很大(每个表 100k+ 行),我想找到使用联接的替代方案。这不是一个家庭作业问题,但用这样的术语分享一个例子会更容易。

假设有两个表:
学生
:id :姓名
1   汤姆
2   莎莉
3   本

书籍
:id  :student_id  :书
1    1                  数学 101
2    1                  历史
3    2                  NULL
4    3                  数学 101

我想找到所有没有历史书的学生。工作子选择是:
从 id 不在的学生中选择姓名(从 book = 'History' 的书籍中选择 Student_id);

这将返回 Sally 和 Ben。

感谢您的回复!

最佳答案

性能是问题吗?或者这只是一些避免子查询的理论(家庭作业?)问题?如果是性能,那么:

SELECT *
FROM studnets s
WHERE NOT EXISTS
(SELECT id FROM books WHERE student_id = s.id AND book = 'History')

将比您在 MySQL 上执行的 IN 执行得好得多(在其他一些数据库上,它们的执行效果相当)。这也可以改写为连接:

SELECT s.*
FROM studnets s
LEFT JOIN books b ON s.id = b.student_id AND b.book = 'History'
WHERE b.id IS NULL

关于Mysql 子选择替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/923438/

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