Postgres查询ChatMessages和ChatUsers表出现重复数据如何解决
问题原因
你当前使用逗号直接拼接两张表的写法没有指定关联条件,实际会执行笛卡尔积运算,返回ChatMessages和ChatUsers所有行的两两组合,因此会出现单条消息对应所有用户邮箱的重复数据。
正确查询语句
推荐使用显式INNER JOIN写法,可读性更高,关联逻辑清晰:
SELECT cm."SenderId", cu."Email", cm."Message" FROM "ChatMessages" cm INNER JOIN "ChatUsers" cu ON cm."SenderId" = cu."Id";
如果需要沿用你现有隐式连接的写法,补充关联条件即可:
SELECT "SenderId", "Email", "Message" FROM "ChatMessages", "ChatUsers" WHERE "ChatMessages"."SenderId" = "ChatUsers"."Id";
上述两种写法都会仅保留SenderId和用户ID匹配的关联行,和你给出的期望返回结果完全一致。
内容的提问来源于stack exchange,提问作者TommyTheReal
相关产品推荐
相关产品推荐

