如何匹配子查询字段?

时间:2016-08-17 20:19:07

标签: mysql subquery

我使用子查询来计算总项目数。

我这样的SQL查询。

SELECT `id`,`name`,
(SELECT count(*) FROM `tags_r` WHERE tag_id = `t`.`id`) as count
FROM `tags` AS `t` WHERE count > '0'

这个子查询是可行的。

但如果我需要得分= 0.我该怎么办?

我试过但不行。

测试1 - 不工作

SELECT `id`,`name`,
if (SELECT count(*) FROM `tags_r` WHERE tag_id = `t`.`id`) > '0'
FROM `tags` AS `t`

测试2 - 不工作

{{1}}

但不行。

1 个答案:

答案 0 :(得分:1)

尝试使用JOIN逻辑:

SELECT 
  t.id,
  t.name,
  COUNT(tr.tag_id) AS count
FROM tags t
LEFT JOIN tags_r tr ON tr.tag_id = t.id
GROUP BY t.id, t.name
HAVING COUNT(tr.tag_id) = 0

但是如果您希望从tags表中返回记录tags_r表中没有匹配行的记录tags_r.tag_id = tags.id,那么您可以使用NOT EXISTS

SELECT 
  t.id,
  t.name
FROM tags t
WHERE NOT EXISTS (
  SELECT 1
  FROM tags_r tr
  WHERE tr.tag_id = t.id
  )