繁体   English   中英

查询SQL以从另一个表中查找行的计数

[英]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 CountMySQL 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM