有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MySQL左连接和组连接返回重复和中断数据

我有几个表,我正试图从中获取大量数据。我有一个名为xguilds_guilds的表,它是我从中选择数据的主表。我还有一个名为xguilds_players的表。所有玩家都连接到xguilds_guilds中的一个条目。这同样适用于xguilds_permissions,其中每个权限都连接到一个xguilds_guilds条目

我的选择查询如下:

SELECT `xguilds_guilds`.*,
  GROUP_CONCAT(`xguilds_permissions`.`permission`) AS `permissions`,
  GROUP_CONCAT(`xguilds_permissions`.`rank`) AS `ranks`,
  GROUP_CONCAT(`xguilds_players`.`uuid`) AS `players`,
  GROUP_CONCAT(`xguilds_players`.`rank`) AS `plranks`
FROM `xguilds_guilds`
  LEFT JOIN `xguilds_permissions` ON `xguilds_guilds`.`id` = `xguilds_permissions`.`guild`
  LEFT JOIN `xguilds_players` ON `xguilds_guilds`.`id` = `xguilds_players`.`guild`
WHERE `admin` = 0
GROUP BY `xguilds_guilds`.`id`;

但是,由于某些原因,未正确选择联接表中的条目。例如,我有一个id为6的公会,我希望为players列选择以下内容:

030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5

但是,它实际上选择了以下字符串,其中UUID不断重复并最终被切断:

030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e606ddfd4cb9,
b9d9b3de-8e38-4277-999c-d95945658537,
f273e51a-a9b8-44af-a019-897e88509ae5,
030adc90-47a4-48ac-b713-e

我不知道是什么导致了这种奇怪的行为。我在连接表方面没有太多经验,在这种情况下这可能是个问题。我还尝试了以下查询,结果正确:

SELECT `xguilds_guilds`.*,
  GROUP_CONCAT(`xguilds_players`.`uuid`) AS `players`
FROM `xguilds_guilds`
  LEFT JOIN `xguilds_players` ON `xguilds_guilds`.`id` = `xguilds_players`.`guild`
WHERE `guild` = 6
GROUP BY `xguilds_guilds`.`id`;

谢谢你的帮助。多谢各位


共 (0) 个答案