Sql 使用来自另一个表的数据的不同计数

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,同

我有四张桌子

所有与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,同样的情况在没有
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子句的编辑答案。