我有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`)
);
我需要下面的查询优化,因此它不使用子查询。我这可以使用连接来完成,但我不知道如何。
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'
)
如果第二个查询需要的用户没有销售记录,那么sale_date> ='2009-01-01'怎么办? – MStodd 2010-09-18 16:29:22
这就是我现在正在考虑的问题......这部分可能无法通过连接实现。 – 2010-09-18 16:36:29
感谢您的回复!是的,我确实希望在2009-01-01之后没有任何销售记录的用户。任何想法如何避免这两个子查询仍然是受欢迎的。 – infrared 2010-09-18 16:48:15