SQL:帮助sql连接

时间:2011-01-16 15:07:13

标签: sql mysql join

您好我有一个应用程序,其中包含帖子,标签和tag_ref链接表。我想查询具有特定标记关联的帖子。

数据库结构如下:

帖子

ID

tags_ref

ROW_ID

TAG_ID

代码

ID

safe_tag

标签

我的查询基本上是在$ safe_tag不为null的情况下然后在post.id = tags_ref.row_id上加入tags_ref,在tags_ref.tag_id = tags.id上加入标签,其中tags_ref.table ='posts'和tags.safe_tag =' food'和post.city_id = 2

此查询是否正确?我使用正确的联接类型吗?

SELECT *
FROM (`posts`)
INNER JOIN `tags_ref` ON `posts`.`id` = `tags_ref`.`row_id`
INNER JOIN `tags` ON `tags_ref`.`tag_id` = `tags`.`id`
WHERE `tags_ref`.`table` = 'posts'
AND `tags`.`safe_tag` = 'food'
AND `posts`.`city_id` = '2' 

我得到的奇怪结果根本没有关联的标签。

由于

1 个答案:

答案 0 :(得分:1)

这将仅返回posts表的结果,而不是连接表中的所有列。我删除了您在问题文本中未指定的city_id约束(并且在查询中):

SELECT P.*
FROM posts AS P
  INNER JOIN tags_ref AS TR ON P.id = TR.row_id
  INNER JOIN tags AS T ON TR.tag_id = T.id
WHERE TR.table = 'posts'
AND T.safe_tag = 'food'

我还添加了表别名并删除了引号。

如果您没有收到任何结果,那就会告诉我没有food的帖子。