返回重复行mysql一对多

时间:2013-09-05 21:54:16

标签: mysql sql database

SELECT pc. * , ssc. * , IF( ssc.category_id = pc.ID, '1', '0' ) AS checked
FROM property_categories pc
LEFT JOIN su_selected_categories ssc ON ssc.su_property_settings_id = 9

我正在尝试执行查找所有类别的选择查询,然后查看其中一个类别是否在另一个表中,是否将其标记为“已检查”

在这个例子中我需要留下的是3行(有3个类别),其中2个应该在被检查的列中作为'1'而剩下的应该是'0'。

此查询返回重复的行,当我尝试按pc.ID分组时,它会错过正确的行之一。

我哪里错了?

 ----------------------
 | id | category_name |
 ----------------------
 | 1  | category1     |
 ----------------------
 | 2  | category2     |
 ----------------------
 | 3  | category3     |
 ----------------------


 ---------------------------------------------
 | id | su_property_settings_id | category_id |
 ---------------------------------------------
 | 1  |                      1  |           2 |
 ----------------------------------------------
 | 2  |                      9  |           2 |
 ----------------------------------------------
 | 3  |                      9  |           1 |
 ----------------------------------------------
 ...more

更新*

我通过pc.ID获得的分组

ID | category_name | ID | su_property_settings_id | category_id | checked
--------------------------------------------------------------------------  
1  |    cat1       | 11 |                       9 |           2 |       0 
2  |    cat2       | 11 |                       9 |           2 |       1 
3  |    cat3       | 11 |                       9 |           2 |       0 

我想要什么

ID | category_name | ID | su_property_settings_id | category_id | checked
--------------------------------------------------------------------------  
1  |    cat1       | 11 |                       9 |           2 |       1 
2  |    cat2       | 11 |                       9 |           2 |       1 
3  |    cat3       | 11 |                       9 |           2 |       0 

1 个答案:

答案 0 :(得分:0)

您将获得重复的行,因为您的连接位于错误的列上。您未在category_id上添加条件。以下应解决重复问题:

SELECT pc.*, ssc.*, (ssc.category_id is not null) AS checked
FROM property_categories pc LEFT JOIN
     su_selected_categories ssc
     ON ssc.su_property_settings_id = 9 and
        ssc.category_id = pc.ID;

如果您仍然有重复项(我怀疑),那么可能是由于category_id列中的重复项。

这会返回10,具体取决于该类别是否全部被选中,而不是'1''0'。请注意,这与查询中的字符值不同。我怀疑数值更合适。

如果您想要字符值,请将SELECT更改为:

SELECT pc.*, ssc.*,
       (case when ssc.category_id is not null then '1' else '0' end) AS checked