Mysql 一对多返回重复行
我正在尝试执行一个select查询,该查询将查找所有类别,然后查看其中一个类别是否在另一个表中(如果已选中),并将其标记为“已选中” 在这个实例中,我需要保留的是3行(有3个类别),其中2行应位于选中列中,作为“1”,其余为“0” 此查询返回重复的行,当我尝试按pc.ID分组时,它会遗漏一个正确的行 我哪里做错了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 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