gpt4 book ai didi

sql - 如何优化此查询以摆脱子查询?

转载 作者:行者123 更新时间:2023-11-29 04:30:16 25 4
gpt4 key购买 nike

我有一个包含 2 个表的数据库:

表 1:

CREATE TABLE IF NOT EXISTS `sales` (
`sale_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`sale_total` int(11) NOT NULL,
`sale_date` date NOT NULL,
`sale_status` int(11) NOT NULL,
PRIMARY KEY (`sale_id`)
) ;

表 2:

CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
`lastname` varchar(200) NOT NULL,
`mail` varchar(200) NOT NULL,
PRIMARY KEY (`user_id`)
);

我需要优化以下查询,使其不使用子查询。我认为这可以使用连接来完成,但我不知 Prop 体如何。

SELECT name, lastname, mail
FROM users
WHERE user_id IN (
SELECT user_id
FROM sales
WHERE sale_date < '2009-01-01'
AND sale_total >100
AND sale_status =4
)
AND user_id NOT IN (
SELECT user_id
FROM sales
WHERE sale_date >= '2009-01-01'
)

最佳答案

使用联接替换 IN 子查询,使用 null-left-joins 替换 NOT IN,使用 GROUP BY 为每个用户只返回一行:

SELECT users.name, users.lastname, users.mail
FROM users
JOIN sales AS s0 ON s0.user_id=users.user_id
LEFT JOIN sales AS s1 ON s1.user_id=users.user_id AND sale_date>='2009-01-01'
WHERE s1.sale_id IS NULL
AND s0.sale_date < '2009-01-01' AND s0.sale_total>100 AND s0.sale_status=4
GROUP BY users.user_id

关于sql - 如何优化此查询以摆脱子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3742419/

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