我正在编写一个mapper来从我的数据库中获取信息。
这是数据库:
spel(id,naam)
spelbord(id,spel_id,level)
fk spel_id - > id in spel
veld(spelbord_id,posX,posY,veldNr,isTarget,Toegang)
fk spelbord_id - >在spelbord中的id
entiteit(spelbord_id,posX,posY,entiteitNr)
fk spelbord_id - >草案中的spelbord_id
fk posX - > posX in veld
fk posY - >草地上的posY
所以我希望我的查询能够给我: posX,posY,veldNr,Toegang,是每个草原的目标(并且如果它存在的话,它们都是存在的)。
例如:
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
通过这个查询,我只得到输出,其中确实存在与其连接的信息。
我需要更改哪些内容才能获得无法匹配的行?
答案 0 :(得分:0)
您的查询已结束;你需要在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列不是主键,否则它不太可能成为问题。 (你记录了外键;这很好。也可以记录候选键。)