mysql - 选择外键 MySQL

标签 mysql sql select join

我有3张 table

Table: cm
    id      date                     title         body
     1      2013-01-05 18:36:58      SA v AUS      SA AUS Body
     2      2013-01-04 08:16:20      PA v AP       PA v AP Body

Table2: cat_post
post_id   cat_id           desc
  1            2           desccccc
  2            2           desccccc
  2            1           desccccc

Table3: cats
cat_id         name                cat_desc
  1            Category1           desccccc
  2            Category2           desccccc

我想从表 cm 中选择 id 位于特定 cat_post.cat_id 下的所有记录。

假设cat_id为1,从cm表中选取cat_post表中post id为1的所有记录。

我使用过这个查询,但是它会返回所有行两次(重复行)

SELECT DISTINCT * from cm INNER JOIN cat_post ON cat_post.cat_id = 2;

最佳答案

如果 cat_post(post_id, cat_id) 有一个 UNIQUE 约束,这将执行:

SELECT cm.* 
FROM cm
  JOIN cat_post AS cp 
    ON cp.post_id = cm.id 
WHERE cp.cat_id = 1 ;

你也可以使用这个:

SELECT cm.* 
FROM cm
WHERE EXISTS
      ( SELECT *
        FROM cat_post AS cp 
        WHERE cp.cat_id = 1 
          AND cp.post_id = cm.id 
       ) ;

关于mysql - 选择外键 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14216242/

相关文章:

php - 使用php在mysql中创建数据库

php - 修改现有代码

sql - 如何在 SQL 中进行数据重组

mysql - SQL仅选择列上具有最大值的行

php - MYSQL:加入两个排序的结果集

在同一进程的不同线程中使用 select() 的成本

mysql - 选择难度递减的随机问题行

php - 获取登录用户的 ID 以显示类别

SQL聚合多个表的数据并对指定列求和

Mysql通过缓冲降低CPU使用率