mysql - 从多对多关系的末端选择数据

标签 mysql sql join

我有一个帖子数据库,每个帖子都有标签。这些表分别命名为 PostsTags。我还有第三个表,名为 Posts_Tags,它维护这两个表之间的多对多关系。

为了做到这一点,我的帖子和标签表都有一个 id 列。因此,我的 Posts_Tags 表同时具有 postidtagid 列来存储映射。

例如,我正在查询标题中包含“class”一词的所有帖子。我可以使用此查询轻松完成此操作:

SELECT * FROM Posts WHERE title LIKE '%{class}%'

但是,现在我想查询所有标题中不仅包含“class”而且还带有“Java”标签的帖子。我可以在两个单独的查询中执行此操作,首先获取 Java 标记的 id:

SELECT id FROM Tags WHERE name='Java'

然后我可以将其插入到我的第一个查询中,如下所示:

SELECT     Posts.* 
FROM       Posts 
INNER JOIN Posts_Tags 
        ON Posts.id=Posts_Tags.postid 
WHERE      Posts_Tags.tagid='$java_tag_id' 
           AND title LIKE '%{class}%'

但是,我知道我可以在单个查询中完成此操作,但我只是不知道如何做。当只执行一个连接时,我仍然需要考虑很多关于连接的问题,而在同一个查询中执行多个连接则让我头晕。我应该如何构建查询来执行此操作?

最佳答案

    SELECT p.* 
      FROM Posts p 
      JOIN Posts_Tags pt
        ON pt.postid = p.id
      JOIN tags t
        ON t.id = pt.tagid
     WHERE t.tag='java'
       AND p.title LIKE '%{class}%';

关于mysql - 从多对多关系的末端选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14230648/

相关文章:

MySQL获取尚未使用的优惠券

mysql - MYSQL 如何将一个表中的最新行连接到另一个表

MySQL连接查询混淆

php - MySQL数据库无法识别从Excel文件(xls)中提取的汉字

php - 在 PHP 7.0.7 上安装 MySQLi 和 pgsql 扩展

php - 计算 LOAD DATA INFILE 插入了多少行

PHP XML 解析问题

sql - 更新 SQL Server Management Studio 编辑器窗口

mysql - Perl 和 MySQL 插入 XML 字符串导致错误 2006 "server gone away"

php - 使用在线 PHP 文件设置对 DB 的本地调用 - 连接问题