繁体   English   中英

MYSQL IF(SELECT)查询返回多个行

[英]MYSQL IF (SELECT) query returns more than one row

我正在尝试在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)

我得到以下输出:

在此处输入图片说明

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM