复杂? MySQL加入SELECT查询

时间:2012-01-27 17:59:08

标签: mysql join chat

我正在尝试获取指定用户ID的“联系人”列表。 假设我的用户ID是1,我需要从 chat-c​​ontactlist 获取我的联系人的ID列表,然后获取每个ID的所有信息。

所有用户的ID,姓名和联系信息

表usr:uid,rname,phonenumber

在线状态和其他内容

表chat-usr:uid,昵称,online_status

包含此用户拥有的每个联系人的用户ID和用户ID:

表格聊天 - 联系人列表:uid,cid(cid =“uid”用户列表中人员的ID

所以我需要指定'uid'的所有'cid'的名称,昵称,online_status ...不知道我读了一个关于左连接的教程但是它接缝很复杂以合并多个表,任何人都想尝试?有什么建议吗?

谢谢

修改

按名称更改名称,因为name是SQL的保留字。

2 个答案:

答案 0 :(得分:2)

SELECT  ccl.uid, 
        Name            = u.Name,
        Nickname        = cu.nickname,
        OnlineStatus    = cu.onlinestatus
FROM    chat-contactlist ccl
        JOIN chat-usr cu ON ccl.cid = cu.uid
        JOIN usr u       ON u.uid   = cu.uid
Where   ccl.uid = @uid /* your filter here */

答案 1 :(得分:2)

这是一个3表连接,您可以在其中找到链接器表chat-contactlist定义的多对多关系:

SELECT u.name username, c.nickname chat_username, c.online_status
FROM chat-contactlist cc
    JOIN usr u ON (u.uid = cc.uid)
    JOIN chat-usr c ON (c.uid = cc.cid);

这是一个明确的联接。如果您要选择特定用户,请稍后在WHERE子句中添加该用户。

SELECT u.name username, c.nickname chat_username, c.online_status
FROM usr u, chat-usr c, chat-contactlist cc
WHERE cc.uid = u.uid
AND cc.cid = c.uid;

这是一个隐式连接,其中表在WHERE语句中通过相等关联。不建议使用,但我发现它们有时更容易阅读。

更多信息: