在单个记录上加入多个记录

时间:2015-09-15 15:20:03

标签: mysql sql join jdbc

我有这张桌子(阵容):

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个时段更少的矿石。我也可以分成多个查询,但我宁愿一次查询数据库并尽快关闭连接。

1 个答案:

答案 0 :(得分:1)

如果不知道表格中的数据,这很难回答。因为您使用的是JOIN,所以每个插槽都需要匹配。我想你可能需要使用LEFT JOIN