SQL:有关 sql 连接的帮助

标签 sql mysql join

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

数据库结构如下:

帖子

ID

tags_ref

行号

表格

标签ID

标签

ID

安全标签

标签

我的查询基本上是如果 $safe_tag 不为空,则在 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' 

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

谢谢

最佳答案

这只会返回 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'

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

如果您没有得到任何结果,这表明我没有关于食物的帖子。

关于SQL:有关 sql 连接的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706075/

相关文章:

Mysql查询优化-范围搜索

java - 如何使用 Jooq insertInto 复制和修改表格行

php - 在mysql数据库中搜索内容

sql - 在oracle sql中连接没有外键关系的表并向结果添加一列?

mysql - 在一个查询中获取所有国家的州和城市

SQL 结果作为列表

java - 安卓 SQLite : Check if row exists in table

php - 选择不同的通知并准备更清晰的通知消息

mysql - mysql 中使用 bigint 和 varchar 时出现“cast”问题

mysql - 带连接的 SQL 查询 group_concat