选择外键MySQL

时间:2013-01-08 13:41:58

标签: mysql sql select join

我有3张桌子

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,从cat cm中选择cat id为cat_id 1的表cm中的所有记录。

我已经使用过此查询,但这会返回所有行两次(重复行)

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

2 个答案:

答案 0 :(得分:1)

如果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 
       ) ;

答案 1 :(得分:0)

试试这个:

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