我正在尝试加入3个表并计算标题的每个首字母的标签。 我尝试了不同的方法并最终使其工作但我不确定它是否是最佳方式:
SELECT letter.letter as firstLetter, COUNT(item_tag.id) AS itemCount
FROM letter
left outer join item
on left(item.title, 1) = letter.letter
left outer join item_tag
ON item_tag.item_id = item.id
AND item_tag.tag_id = 1
GROUP BY letter.letter
这是sqlfiddle链接: http://sqlfiddle.com/#!9/3155cd/2
这是我的表格:
档案:
+----+-----------------+
| id | title |
+----+-----------------+
| 1 | title goes here |
+----+-----------------+
标签:
+----+----------+
| id | name |
+----+----------+
| 1 | tag name |
+----+----------+
item_tag
+----+--------+---------+
| id | tag_id | item_id |
+----+--------+---------+
| 1 | 1 | 1 |
+----+--------+---------+
字母
+----+--------+
| id | letter |
+----+--------+
| 1 | A |
| 2 | B |
| . | . |
+----+--------+
答案 0 :(得分:0)
计数是正确的。您正在计算标题上的标签数量。
根据SQL Fiddle中的数据,“Hhh”有两个标签,1和2.因此,“H”的计数为2。
“C”的计数为1,因为项目“3”没有标签,项目“4”有1个标签。
虽然正确,但您的查询不必要地复杂。您可以删除一个join
:
SELECT l.letter as first_letter, COUNT(it.id) AS tag_count
FROM letter l left outer join
item i
on left(i.title, 1) = l.letter left outer join
item_tag it
on it.item_id = i.id
GROUP BY l.letter;
另请注意,将表的缩写用作表别名。这些使查询更容易理解。