我有这张桌子(阵容):
ownerId (pk)
slot1 (fk heroId)
slot2 (fk heroId)
slot3 (fk heroId)
slot4 (fk heroId)
slot5 (fk heroId)
现在我需要从对应于插槽的表(英雄)中检索记录。
heroId (pk)
ownerId (fk)
templateId (fk)
...
并将其与表格(herotemplates)联系起来。
templateId (pk)
...
所以我提出了以下问题:
String query = "SELECT * FROM lineup " +
"JOIN heroes AS slot1hero ON slot1hero.heroId = lineup.slot1 " +
"JOIN herotemplates AS slot1template ON slot1hero.templateId = slot1template.templateId " +
"JOIN heroes AS slot2hero ON slot2hero.heroId = lineup.slot2 " +
"JOIN herotemplates AS slot2template ON slot2hero.templateId = slot2template.templateId " +
"JOIN heroes AS slot3hero ON slot3hero.heroId = lineup.slot3 " +
"JOIN herotemplates AS slot3template ON slot3hero.templateId = slot3template.templateId " +
"JOIN heroes AS slot4hero ON slot4hero.heroId = lineup.slot4 " +
"JOIN herotemplates AS slot4template ON slot4hero.templateId = slot4template.templateId " +
"JOIN heroes AS slot5hero ON slot5hero.heroId = lineup.slot5 " +
"JOIN herotemplates AS slot5template ON slot5hero.templateId = slot5template.templateId " +
"WHERE lineup.ownerId = " + ownerId;
但是,这会返回一个空结果。我非常怀疑它是查询,因为我对复杂的连接不是很有经验。知道它有什么问题吗?
我可以通过规范化阵容来解决这个问题,但是我永远不会使用比5个时段更少的矿石。我也可以分成多个查询,但我宁愿一次查询数据库并尽快关闭连接。
答案 0 :(得分:1)
如果不知道表格中的数据,这很难回答。因为您使用的是JOIN
,所以每个插槽都需要匹配。我想你可能需要使用LEFT JOIN
。