SQL:SQL连接的帮助
嗨,我有一个应用程序,有帖子,标签和标签参考链接表。我想查询具有特定标记关联的帖子 数据库结构如下: 帖子 身份证 标记\u ref 行id 桌子 标签号 标签 身份证 安全标签 标签 我的查询基本上是这样的:如果$safe\u tag不为null,那么就在post.id=tags\u ref.row\u id上加入tags\u ref,在tags\u ref.tag\u id=tags.id上加入tags,其中tags\u ref.table='posts'和tags.safe\u tag='food'和post.city\u id=2 这个问题正确吗?我是否使用了正确的联接类型SQL:SQL连接的帮助,sql,mysql,join,Sql,Mysql,Join,嗨,我有一个应用程序,有帖子,标签和标签参考链接表。我想查询具有特定标记关联的帖子 数据库结构如下: 帖子 身份证 标记\u ref 行id 桌子 标签号 标签 身份证 安全标签 标签 我的查询基本上是这样的:如果$safe\u tag不为null,那么就在post.id=tags\u ref.row\u id上加入tags\u ref,在tags\u ref.tag\u id=tags.id上加入tags,其中tags\u ref.table='posts'和tags.safe\u tag='
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\u id
约束(这是您在查询中指定的):
我还添加了表别名并删除了引号
如果你没有得到任何结果,那就意味着我没有关于
食品的帖子
为什么你要引用所有的表名和列名?你的意思是要有city\u id
约束吗?@Oded,这是codeigniter评测功能的打印输出你的查询有效,尽管我确实希望有一个city\u id约束。每个帖子都有一个不为空的city_id字段。你的问题和我的有什么不同?除了那张照片,我什么也看不见alisases@iamjonesy-除上述差异外,无差异。但是,如果您的city\u id
是一个整数类型,则应在查询时不加引号:和P.city\u id=2
。如果这仍然不起作用,请检查您的数据。
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'