MYSQL IF(SELECT)查询返回多行

时间:2017-07-27 14:10:28

标签: mysql sql if-statement

我正在尝试在SQL查询中实现IF(SELECT)语句。到目前为止,查询看起来像这样:

SELECT *, IFNULL(duree_corrigee,duree) as
duree_final, IF((SELECT COUNT(*) FROM pointage_interval WHERE panier=1 
AND pointage_employe_id = 'FH'
AND semaine = 23 GROUP BY date)>=1,  
1,0) as panier_final FROM pointage_interval P
JOIN
employe E ON P.pointage_employe_id
= E.employe_id JOIN chantier C
ON C.chantier_id=P.pointage_chantier_id
WHERE (pointage_employe_id = 'FH'
AND semaine = 23)

当我运行它时,它返回我:#1242 - 子查询返回超过1行

基本上我可以有许多行具有相同的日期。一列是“panier”,可以是1或0.我想创建一个新的列panier_final,如果存在至少一个值为panier = 1的列,则取值为1或0天。因此,具有相同日期的所有行将获得panier_final的相同值1或0。

如果我在没有IF(SELECT)的情况下运行查询,请执行以下操作:

SELECT *, IFNULL(duree_corrigee,duree) as
duree_final FROM pointage_interval P
JOIN
employe E ON P.pointage_employe_id
= E.employe_id JOIN chantier C
ON C.chantier_id=P.pointage_chantier_id
WHERE (pointage_employe_id = 'FH'
AND semaine = 23)

我得到了这个输出:

enter image description here

如您所见,2017-06-07同一天有两行。所以我希望我的IF(SELECT)查询为每一行创建一个新列(panier_final),这个新列的值对于每个相同日期的行是相同的。在这种情况下,每一行都会得到一个新的列panier_final,值为1,因为每个给定日期的值都是1,值panier等于或高于1

1 个答案:

答案 0 :(得分:1)

将此条件添加到子查询中:date = P.date

你的子查询将是这样的:

SELECT COUNT(*) FROM pointage_interval WHERE panier=1 
AND pointage_employe_id = 'FH' AND date = P.date
AND semaine = 23 GROUP BY date

我想你可以删除GROUP BY date