好的,我有一些需要做的具体查询。
我有一个表“描述”,我需要查找是否有链接到该描述的图片,为此,我与表"file"进行了左连接。
SELECT D.id, COUNT(*) as haspicture
FROM `description`as D
LEFT JOIN `files` as F ON D.id=F.id
GROUP BY D.id
它工作得很好,但是该列有图片包含它应该包含的内容,即找到的文件数。 如果至少附加了 1 个文件,我只想将 haspicture 设置为 1。
我需要它为 1,因为这样我就可以用不同的优先级对结果进行排序。当然,我缩短了真实的查询,我选择的不仅仅是D.id,而且还有现实中的图片。
最佳答案
您可以使用case
语句。另外,因为要小心你正在计算的内容:
SELECT D.id,
(CASE WHEN COUNT(f.id) > 0 THEN 1 ELSE 0 END) as haspicture
FROM `description`D LEFT JOIN
`files` F
ON D.id = F.id
GROUP BY D.id;
您可能会发现以下代码执行得更好,因为没有更大的 group by
:
select d.id,
(exists (select 1 from files where d.id = f.id)) as haspicture
from description d;
为了获得最佳性能,需要对files(id)
建立索引。
关于mysql - SQL,左连接,分组依据,计数(*)作为haspicture?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26719048/