[英]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.