带连接的Mysql子查询

时间:2013-09-05 16:57:34

标签: mysql subquery

我有一个非常复杂的查询(对我来说),我不确定如何执行,虽然我已经尝试过。我有一个

user table

license table FK user.id位于license.parent_id和license.child_id

item table FK是user.id,可在item.user_id

中找到

我需要计算item table中属于用户的每个用户及其许可证尚未过期的被许可人的项目数。

到目前为止,这是我所拥有的。

SELECT *
FROM
(SELECT id as user_id, date_expired as user_date_expired 
FROM user 
WHERE id IN (13, 15)
) AS user
JOIN
(
SELECT COUNT(id) as item_count FROM item WHERE date_added > DATE_SUB(NOW(), INTERVAL     300 DAY) AND date_expired > CURDATE() 
) AS item

目前返回:

user_id user_date_expired item_count

13 2013-10-05 20:23:31 24

15 2013-08-08 22:21:09 24

感谢任何帮助。

强尼

2 个答案:

答案 0 :(得分:1)

从您提供的信息中可以看出,不需要许可证表。

这是用用户和项目表之间的正确连接结构重写的查询。

SELECT  U.ID            AS user_id
        ,U.date_expired AS user_date_expired 
        ,COUNT(I.id)    AS item_count 
FROM    USER U
INNER JOIN
        ITEM I
ON      I.user_id = U.id
WHERE   U.id IN (13,15)
AND     I.date_added > DATE_SUB(NOW(), INTERVAL  300 DAY) 
AND     I.date_expired > CURDATE()     
GROUP BY
        U.ID
        ,U.date_expired

答案 1 :(得分:0)

跳过子查询并对所有三个表使用普通连接,然后为每个结果行上应该相等的所有列添加group by子句。