有两个表
a表为用户表
字段uid存放用户id
字段name存放用户昵称b表为消息表
存放from_uid为发送消息用户ID
    to_uid为接受消息的用户ID现在需求是以b表为主表
我想通过一条sql查询,来查询b表里的所有信息并且关联a表,一次把发送者和接受者的用户昵称查出来想了半天没想到办法求教各位高手给指点一下最好直接给出代码

解决方案 »

  1.   

    select b.*,a1.name as fromName,a2.name as toName
    from b inner join a a1 on b.from_uid=a1.uid
    inner join a a2 on b.to_uid=a1.uid
      

  2.   

    这个a1和a2是什么呀老兄
    我的a表假定名为userinfo,b表假定名为message你这个该怎么翻译呀
      

  3.   

    select b.*,a1.name as fromName,a2.name as toName
    from message b inner join userinfo a1 on b.from_uid=a1.uid
        inner join userinfo a2 on b.to_uid=a1.uid
      

  4.   

    我现在message表里面放了2条信息一个from_uid=5 to_uid=2
    一个from_uid=2 to_uid=5那么查询出来根据userinfo表里面的uid来匹配的话应当是有两条记录
    并且分别把uid=5和uid=2的人名称取出来显示现在这样查询出来记录集为空
      

  5.   

    select b.*,a1.name as fromName,a2.name as toName from b inner join a a1 on b.from_uid=a1.uid inner join a a2 on b.to_uid=a1.uid
      

  6.   


    提供你的测试数据!很显然你的查询写错了。   建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  7.   


      建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
      参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
      

  8.   

    userinfo表有一个uid字段一个name字段
    uid存放用户id,name字段存放用户名
    message表
    to_uid字段 存放接受消息方
    from_uid字段 存放发送消息方
    message字段 存放消息内容userinfo表
    第一行内容
    uid=1
    name=张三第二行内容
    uid=2
    name=李四
    message表内容
    第一行
    from_uid=1    to_uid=2 message=消息内容
    第二行
    from_uid=2    to_uid=1 message=消息内容
    想要的查询结果为主要查询message表看总共有多少条内容以及列表显示
    因为用户名内容存放为userinfo表
    所以需要和userinfo表联合查询查询出来的结果显示应当为
    发送方              接收方
    张三     发送给     李四
    李四     发送给     张三
    其中结果中发送给是我自己写的
    只是想查询出来的结果通过uid的匹配把用户名给列出来
      

  9.   

    DROP TABLE IF EXISTS `message`;
    CREATE TABLE `message` (
      `to_uid` int(11) NOT NULL,
      `from_uid` int(11) NOT NULL,
      `message` varchar(255) COLLATE utf8_unicode_ci NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;-- ----------------------------
    -- Table structure for userinfo
    -- ----------------------------
    DROP TABLE IF EXISTS `userinfo`;
    CREATE TABLE `userinfo` (
      `uid` int(11) NOT NULL,
      `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;-- ----------------------------
    -- Records 
    -- ----------------------------
    INSERT INTO `message` VALUES ('2', '1', '你好');
    INSERT INTO `message` VALUES ('1', '2', '你也好');
    INSERT INTO `userinfo` VALUES ('1', '张三');
    INSERT INTO `userinfo` VALUES ('2', '李四');
      

  10.   

     #3楼 的有一个地方写错了。
    select b.*,a1.name as fromName,a2.name as toName
    from message b inner join userinfo a1 on b.from_uid=a1.uid
        inner join userinfo a2 on b.to_uid=a2.uid
    mysql> select * from message;
    +--------+----------+---------+
    | to_uid | from_uid | message |
    +--------+----------+---------+
    |      2 |        1 | 你好    |
    |      1 |        2 | 你也好  |
    +--------+----------+---------+
    2 rows in set (0.27 sec)mysql> select * from userinfo;
    +-----+------+
    | uid | name |
    +-----+------+
    |   1 | 张三 |
    |   2 | 李四 |
    +-----+------+
    2 rows in set (0.00 sec)mysql> select b.*,a1.name as fromName,a2.name as toName
        -> from message b inner join userinfo a1 on b.from_uid=a1.uid
        ->     inner join userinfo a2 on b.to_uid=a2.uid;
    +--------+----------+---------+----------+--------+
    | to_uid | from_uid | message | fromName | toName |
    +--------+----------+---------+----------+--------+
    |      1 |        2 | 你也好  | 李四     | 张三   |
    |      2 |        1 | 你好    | 张三     | 李四   |
    +--------+----------+---------+----------+--------+
    2 rows in set (0.00 sec)mysql>