gpt4 book ai didi

MySQL:通过 "Inner Join"添加更多表会导致空结果集

转载 作者:行者123 更新时间:2023-11-29 23:12:04 25 4
gpt4 key购买 nike

首先:抱歉,查询中的关键字是德语。我将提供每个关键字的解释,以便您可以轻松理解该问题。

我的数据库由 4 个表组成:

mitarbeiter(MA_ID,名称...)包含员工数据。相关的是 ID 和姓名(名字和姓氏分开)

stunden_auftrag(MA_ID、gesamt...)包含员工必须为项目工作的工作时间。由员工 ID 标识。对于此查询,只有总金额 (gesamt) 很重要

stunden_geleistet(MA_ID,gesamt...)与之前的工作时间相同。

auftrag(MA_ID、von、bis...)包含订单运行时间的日期。 (von 表示开始日期,bis 表示结束日期)

以下查询的目的是显示订单在未来 31 天内终止的所有员工。

我提出的查询是这样的:

`SELECT  mitarbeiter.MA_ID, 
mitarbeiter.nachname,
mitarbeiter.vorname,
auftrag.von,
auftrag.bis,
DATEDIFF(auftrag.bis, CURRENT_TIMESTAMP) AS Resttage
FROM mitarbeiter
INNER JOIN auftrag ON mitarbeiter.MA_ID = auftrag.MA_ID
HAVING Resttage >= '0' AND Resttage <= '31';`

此查询为我提供了所需的结果集。现在我想向查询添加另一个要求。它不仅应该显示订单即将终止的员工,还应该显示仅剩不到订单工作时间 10% 的员工。 (比如“hoursbooked - hoursworked <= hoursbooked*0.1 ”)

为此,我必须为两个包含工作时间的表添加联接:

`SELECT mitarbeiter.MA_ID,
mitarbeiter.nachname,
mitarbeiter.vorname,
auftrag.von,
auftrag.bis,
DATEDIFF(auftrag.bis, CURRENT_TIMESTAMP) AS Resttage,
FROM mitarbeiter
INNER JOIN auftrag ON mitarbeiter.MA_ID = auftrag.MA_ID
INNER JOIN stunden_geleistet ON auftrag.MA_ID = stunden_geleistet.MA_ID
INNER JOIN stunden_auftrag ON stunden_geleistet.MA_ID = stunden_auftrag.MA_ID
HAVING Resttage >= '-31' AND Resttage <= '31';`

我知道此查询尚未过滤此要求,因为我已经通过此查询获得了空结果集。仅添加联接会使结果集为空,尽管肯定至少有一个虚拟员工满足要显示的所有要求。

示例数据:

表“mitarbeiter”

MA_ID nachname vorname
1 Simpson Homer

表“auftrag”

MA_ID von bis
1 2014-01-01 2015-01-31

表“stunden_gebucht”

MA_ID gesamt
1 1200

表“stunden_geleistet”

MA_ID gesamt
1 1100

据我了解,由于满足查询条件,应该显示该员工。但结果集是空的。我没有收到任何语法错误,并且我认为我的连接结构也是正确的。你知道错误是什么吗?

提前致谢!

最诚挚的问候,乔尔蒙G

最佳答案

你可以尝试这个查询吗:

SELECT mitarbeiter.MA_ID,
mitarbeiter.nachname,
mitarbeiter.vorname,
auftrag.von,
auftrag.bis,
DATEDIFF(auftrag.bis, CURRENT_TIMESTAMP) AS Resttage,
FROM mitarbeiter
INNER JOIN auftrag ON mitarbeiter.MA_ID = auftrag.MA_ID
INNER JOIN stunden_geleistet ON auftrag.MA_ID = stunden_geleistet.MA_ID
INNER JOIN stunden_auftrag ON stunden_geleistet.MA_ID = stunden_auftrag.MA_ID
where DATEDIFF(auftrag.bis, CURRENT_TIMESTAMP) between -31 and 31

关于MySQL:通过 "Inner Join"添加更多表会导致空结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28024976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com