gpt4 book ai didi

MYSQL - 当 DO 存在和不存在时进行 SubSelect

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:33 25 4
gpt4 key购买 nike

情况概览

当前的问题是关于从表A( Material )表B(MaterialRevision)两个表中选择值的问题。但是,表 A 的 PK 可能存在或可能不存在于表 B 中。当它不存在时,此问题中描述的查询将不会返回表 A 的值,但它应该。所以基本上这是发生了什么:

查询仅在 A.id 存在于 B.id 中时才返回值,事实上,当 A.id 也不存在于 B.id 中时,我需要它从 A 返回值。

问题:

假设有两个表。表 Material 和表 Material 修订。请注意,PK idMaterialMaterialRevision 中的 FK。

当前的“模拟”表 enter image description here

查询目标

Obs: remember these two tables are a simplification of the real tables.

对于每种 Material ,打印 Material 变量和来自 MaterialRevision 的最后一个 (MAX) RevisionDate。如果没有 RevisionDate,则打印空白 ("") 作为“最后修订日期”。

发生了什么错误

对于每种 Material ,打印 Material 变量和来自 MaterialRevision 的最后一个 (MAX) RevisionDate。如果 Material 没有修订,则不打印 Material (跳过)。

当前代码

SELECT 
Material.idMaterial,
Material.nextRevisionDate,
Material.obsolete,
lastRevisionDate
FROM Material,

(SELECT MaterialRevision.idMaterial, max(MaterialRevision.revisionDate) as "revisionDate" from MaterialRevision
GROUP BY MaterialRevision.idMaterial
) AS Revision

WHERE (Material.idMaterial = Revision.idMaterial AND Material.obsolete = 0)

用于达到本题所述状态的引用和链接

Why is MAX() 100 times slower than ORDER BY ... LIMIT 1?

MySQL get last date records from multiple

MySQL - How to SELECT based on value of another SELECT

MySQL Query Select where id does not exist in the JOIN table

PS I hope this question is correctly understood since it took me a lot of time to build it. I researched a lot in stackoverflow and after several failed attempts I had no option but to ask for help.

最佳答案

你应该使用 JOIN :

SELECT m.idMaterial, m.nextRevisionDate, mr.revisionDate AS "lastRevisionDate"
FROM Material m
LEFT JOIN MaterialRevision AS mr ON mr.idMaterial = m.idMaterial AND mr.revisionDate = (
SELECT MAX(ch.revisionDate) from MaterialRevision ch
WHERE mr.idMaterial = ch.idMaterial)
WHERE m.obsolete = 0

Here是对什么是 INNER JOINLEFT JOINRIGHT JOIN 的解释。 (如果您经常在查询中交叉表,您会爱上它们)

由于 m.obsolete 永远为真,我在 SELECT 子句中省略了它

关于MYSQL - 当 DO 存在和不存在时进行 SubSelect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53068528/

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