1

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

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

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

2 回答 2

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 
       ) ;
于 2013-01-08T14:34:54.197 回答
0

尝试这个:

SELECT DISTINCT cm.* 
FROM cm 
INNER JOIN cat_post cp ON cm.id = cp.post_id 
WHERE cp.cat_id = 1;
于 2013-01-08T14:26:25.353 回答