Mysql 一对多返回重复行

Mysql 一对多返回重复行,mysql,sql,database,Mysql,Sql,Database,我正在尝试执行一个select查询,该查询将查找所有类别,然后查看其中一个类别是否在另一个表中(如果已选中),并将其标记为“已选中” 在这个实例中,我需要保留的是3行(有3个类别),其中2行应位于选中列中,作为“1”,其余为“0” 此查询返回重复的行,当我尝试按pc.ID分组时,它会遗漏一个正确的行 我哪里做错了 SELECT pc. * , ssc. * , IF( ssc.category_id = pc.ID, '1', '0' ) AS checked FROM property_cat

我正在尝试执行一个select查询,该查询将查找所有类别,然后查看其中一个类别是否在另一个表中(如果已选中),并将其标记为“已选中”

在这个实例中,我需要保留的是3行(有3个类别),其中2行应位于选中列中,作为“1”,其余为“0”

此查询返回重复的行,当我尝试按pc.ID分组时,它会遗漏一个正确的行

我哪里做错了

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
已更新*

通过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
我想要什么

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
中包含该条件。以下内容应可解决复制问题:

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 
如果您仍然有重复项(我对此表示怀疑),那么可能是由于
category\u id
列中存在重复项

这将返回
1
0
,具体取决于是否每个类别都已选定,而不是
'1'
'0'
。注意,这与查询中的字符值不同。我认为这个数值更合适

如果需要字符值,请将
选择更改为:

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;

通过
添加到您的
组中,无论您希望哪个字段不会被“遗漏”。您的问题不清楚这是哪个字段,显示您获得的输出和所需的输出会有所帮助。非常感谢!是的,我需要这些数值——我不知道为什么要用引号括起来。
SELECT pc.*, ssc.*,
       (case when ssc.category_id is not null then '1' else '0' end) AS checked