【发布时间】:2013-03-15 10:43:42
【问题描述】:
例如,我有 3 个表: 首先像“用户”,每个用户都存储他的名字。第二 - “位置”,存储用户地址的位置 - 通常 1 个地址对应 1 个用户。第三个 - “消息” - 每个用户通常都有一堆记录。
当加入这三个表时 - 就像
SELECT Users.name, Location.address, Messages.message FROM Users
LEFT JOIN Location ON Location.user_id = Users.id
LEFT JOIN Messages ON Messages.user_id = Users.id
WHERE blah blah
结果将包含许多重复记录,因为表“消息”对于每个用户都有许多记录。这些重复项会减慢获取速度。
所以我正在寻找解决方案,如何优化它。
例如,我尝试了GROUP_CONCAT() 和GROUP BY User.id - 但是当GROUP_CONCAT() 的结果相对较长时,GROUP_CONCAT() 开始返回NULL。而且我无法掌握它,我试图将group_concat_max_len 和max_allowed_packet 设置为高值 - 都没有运气。
嗯,有人对此有什么想法吗?
ps 可能需要注意的是,在我的实际情况中,我有很多列,而不是只有一列“消息”,并且有许多不同的行。我的“消息”表看起来像“消息”、“时间”、“收件人”、“已删除”、“中”等,我的 GROUP_CONCAT() 包含所有这些字段。
更新:
如果只有一条记录似乎是NULL,则似乎GROUP_CONCAT() 会丢弃所有结果。
例如如果使用GROUP_CONCAT(Messages.message, Messages.time),并且偶尔一行时间为NULL,则返回NULL。
【问题讨论】:
标签: mysql sql database join duplicates