0

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

user table

license tableFK user.id 在 license.parent_id 和 license.child_id 中找到

item tableFK 是 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

感谢任何帮助。

强尼

4

2 回答 2

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
于 2013-09-05T17:06:20.200 回答
0

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

于 2013-09-05T17:11:02.047 回答