gpt4 book ai didi

mysql - 带有连接和可选匹配的 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 22:40:21 25 4
gpt4 key购买 nike

我正在编写一个映射器来从数据库中获取信息。

这是数据库:

  • spel(id, naam)

  • spelbord(id, spel_id, level)

    fk spel_id --> spel 中的 id

  • veld(spelbord_id, posX, posY, veldNr, isTarget, Toegang)

    fk spelbord_id --> spelbord 中的 id

  • entiteit(spelbord_id, posX, posY, entiteitNr)

    fk spelbord_id --> veld 中的 spelbord_id

    fk posX --> 草原中的 posX

    fk posY --> 草原中的posY

所以我希望我的查询能够给出:每个 veld 的 posX、posY、veldNr、Toegang、isTarget(以及 entiteitnr,如果存在)。

例如:

1, 2, 1, true, false, 1

(该草原上有一个实体),或

1, 3, 1, true, false, null

(该草原上没有实体)。

这是我的查询,但它似乎不起作用

select v.posX, v.posY, v.veldNR, v.toegang, v.isTarget, i.EntiteitNr 
from spel as s
join spelbord as sb ON sb.Spel_ID = s.ID
join veld v ON sb.id = v.Spelbord_id
join entiteit i ON v.PosX = i.veld_PosX AND v.PosY = i.veld_PosY
order by posX,posY

通过此查询,我仅在确实存在与之连接的实体的情况下获得输出。

我需要更改什么才能获取没有实体匹配的行?

最佳答案

您的查询已结束;您需要在 Enteitit 和其他表之间的联接中添加一个单词 LEFT。看起来您根本不需要使用 Spel 或 Spelbord 来获取需要选择的数据:

SELECT v.posX, v.posY, v.veldNR, v.toegang, v.isTarget, i.EntiteitNr
FROM veld AS v
LEFT JOIN entiteit AS i ON v.PosX = i.veld_PosX AND v.PosY = i.veld_PosY
ORDER BY posX, posY

Spel 和 Spelbord 的存在/不存在不应影响结果。如果它们确实有影响,那么您当然可以将它们添加回来,但这不太可能成为问题,除非 Spel 和 Spelbord 中的 ID 列不是主键。 (您记录了外键;这很好。最好也记录候选键。)

关于mysql - 带有连接和可选匹配的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29393425/

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