[英]Query sql to find row's count from another table
在我的MySQL数据库中,我有以下3个表:
ACCOUNT (primary key is name)
name
directory
birthdate
sex
FILES (primary key is id)
id (autoincrement)
name (account foreign key)
filename
uploaded_date
CHECKED (primary key is the couple name - filename)
name (account foreign key)
filename (files foreign key)
我想进行查询以显示如下所示的结果表:
RESULT
name - directory - birthdate - sex - filename uploaded_date - checkedCount
我希望在checkCount列中的每个唯一文件名中都有CHECKED表中现有行的计数编号。
我尝试过,但没有成功:
SELECT * FROM (SELECT * FROM account NATURAL JOIN files) AS table_alias LEFT JOIN (SELECT *, count(*) AS checkedCount FROM checked) AS checked_alias ON table_alias.filename = checked_alias.filename
当前,在ACCOUNT表中只有2行,在FILES表中有6行,在CHECKED表中有6行来自ACCOUNT,同名,其他所有6个唯一文件名。
我不明白为什么在我的结果表中的checkCount列中,我将所有值都设置为null,但一个值却设置为6。我的目标应该是所有6行的checkedCount = 1,因为使用了FILES表中的每个FILE在CHECK表中一次。
所以我猜你知道count
是正确的吗? 通过使用计数,您需要一个group by子句。
例:
SELECT count(name) as count, name FROM CHECKED GROUP BY name
现在是问题所在。 您想依靠一个很大的讨厌的连接。 因此,让我们联接表,为它们添加别名,然后对字段进行计数。
SELECT ACCOUNT.name AS name, ACCOUNT.directory AS directory, ACCOUNT.birthDate AS birthdate, ACCOUNT.sex AS sex, FILES.filename AS filename, FILES.uploaded_date AS uploaded_date, count(CHECKED.filename) AS checkedCount
FROM ACCOUNT JOIN FILES ON ACCOUNT.name = FILES.name JOIN CHECKED ON FILES.filename = CHECKED.filename GROUP BY CHECKED.filename;
这...大...长...令人困惑的... join语句应该执行您想要的操作,但是我还将看看MySQL Count和MySQL Aliasing使其更漂亮。
尝试这个
SELECT
a.*, f.filename, f.uploaded_date, IFNULL(c.cnt, 0) as 'checkedCount'
FROM
account a
LEFT OUTER JOIN files f ON a.name = f.name
LEFT OUTER JOIN (SELECT name, COUNT(*) FROM checked GROUP BY 1) c ON a.name=c.name
如果我明白这一点,那么以下上帝应该为您工作:
SELECT
A.name
,A.directory
,A.birthdate
,A.sexfilename
,F.uploaded_date
,(CASE WHEN C.filename IS NOT NULL THEN 1 ELSE 0 END) AS checkedCount
FROM
ACCOUNT A
LEFT JOIN FILES F
ON A.name = F.name
LEFT JOIN CHECKED C
ON F.filename = C.filename
试试看,让我知道。
我不知道您的数据库是什么,但是您的“ CHECKED”表不能转换为FILES表中的“ checked”列吗? 因为是1-1关系? 也许这会使它变得更容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.