Sql 使用来自另一个表的数据的不同计数
我有四张桌子 所有与ID相关的东西都是INT,其余的都是文本。 我想计算用户被标记的相册数量,因此,如果用户在相册1中被标记一次,在相册2中被标记一次,在相册3中被标记一次,那么它将显示3,如果在其中任何一个中标记更多,它仍将显示3。 我试着做:Sql 使用来自另一个表的数据的不同计数,sql,sqlite,Sql,Sqlite,我有四张桌子 所有与ID相关的东西都是INT,其余的都是文本。 我想计算用户被标记的相册数量,因此,如果用户在相册1中被标记一次,在相册2中被标记一次,在相册3中被标记一次,那么它将显示3,如果在其中任何一个中标记更多,它仍将显示3。 我试着做: SELECT COUNT(DISTINCT ALBUM_ID) FROM PICTURES WHERE ID=(SELECT PICTURE_ID FROM TAGS WHERE USER_ID=userId); 但是它返回了1,尽管它应该返回3,同
SELECT COUNT(DISTINCT ALBUM_ID) FROM PICTURES WHERE ID=(SELECT PICTURE_ID FROM TAGS WHERE USER_ID=userId);
但是它返回了1,尽管它应该返回3,同样的情况在没有DISTINCT
的情况下发生。
我怎样才能拿到这笔钱?
编辑:
我只想检查一个用户(我有用户的ID和姓名)您必须加入
用户
,并使用左
加入标签
和图片
并聚合:
SELECT u.id, u.name, COUNT(DISTINCT p.album_id) counter
FROM users u
LEFT JOIN tags t ON t.user_id = u.id
LEFT JOIN pictures p ON p.id = t.picture_id
GROUP BY u.id, u.name
如果您只想要特定用户的结果:
SELECT u.id, u.name, COUNT(DISTINCT p.album_id) counter
FROM users u
LEFT JOIN tags t ON t.user_id = u.id
LEFT JOIN pictures p ON p.id = t.picture_id
WHERE u.id = ?
GROUP BY u.id, u.name -- you may omit this line, because SQLite allows it
或使用相关子查询:
SELECT u.id, u.name,
(
SELECT COUNT(DISTINCT p.album_id)
FROM tags t INNER JOIN pictures p
ON p.id = t.picture_id
WHERE t.user_id = u.id
) counter
FROM users u
WHERE u.id = ?
将
?
替换为所需的用户id。如果没有示例数据,很难帮助您。但是您的子查询返回的是什么?它返回表示用户标记的图片ID的不同值(这里有3个值),并将我要检查的用户的详细信息放在最后?@Velanar32您的意思是只希望查询特定的用户ID吗?是,我有它的ID和密码name@Velanar32请参阅我的带WHERE子句的编辑答案。