表一:Friend
字段:nUserID,nFriendID,strGroupName表二:User
字段:ID,strNickname,keyUser.ID没有的值Friend.nFriendID就不能有。
User.ID没有的值Friend.nUserID就不能有。
ID字段表示独一无二永不重复。现在我想从两个表中选出一些纪录,条件是已知User.key,此时可求得User.ID,再从Friend表中取出nUserID等于User.ID的所有纪录,再根据这些纪录的nFriend值取出User表里的strNickname。总结一下,我要得到的纪录是:Friend.nFriendID , Friend.strGroupName  ,  User.strNickname我写了一个SQL语句:SELECT * FROM Friend where nUserID = (SELECT ID FROM User WHERE key='a423-543-ffaw')此时程序崩溃,用try也阻止不了。出错处是一条汇编语句。请问是我的数据库设计有问题,还是我的SQL语句写错了?

解决方案 »

  1.   

    SELECT f.nFriendID, f.strGroupName, u.strNickName
        FROM User u
        INNER JOIN Friend f ON f.nUserID = u.ID
        WHERE u.key = ''a423-543-ffaw'试试
      

  2.   

    SELECT * FROM Friend where nUserID in (SELECT ID FROM User WHERE key='a423-543-ffaw')如果用 "=" 时,可能出现 overflow楼上的是正确的,按他的语法即可。其基本的语法是:SELECT Friend.nFriendID , Friend.strGroupName  ,  User.strNickname
    FROM Friend,User
    WHERE Friend.nFriendID = User.ID AND User.Key = 'a423-543-ffaw'
      

  3.   

    SELECT F.nFriendID,F.strGroupName,U.strNickName
    FROM User U,Frind F
    WHERE U.ID=F.nUserID
    AND U.key>...
      

  4.   

    按照88dd(巴迪)的SQL语句,得到的结果是:ID strNickname strGroupName
    0 Jack "好友"
    1 Jack "黑名单"
    5 Jack "好友"
    15 Jack "好友"
    strNickname居然全是ID=0的User的昵称!为什么?(数据库中每个昵称都是不重复的)(而WnEunfn(云在青天水在瓶·一动凡尘念三千)的SQL语句的结果只有一条纪录。)
    为什么?
      

  5.   

    终于搞定了!!!!!!!!!⌒_⌒v     ⌒_⌒v     ⌒_⌒v     ⌒_⌒v     ⌒_⌒v 
      
    strcpy(szSQL,"SELECT Friend.nFriendID , Friend.strGroupName  ,  UserData.strNickname "
    "FROM Friend,UserData "
    "WHERE UserData.ID=Friend.nFriendID And Friend.nUserID IN ( SELECT UserData.ID FROM UserData WHERE UserData.strCDKEY = '");
    strcat(szSQL,strCDKEY);
    strcat(szSQL,"')");严重感谢 88dd(巴迪)和 WnEunfn(云在青天水在瓶·一动凡尘念三千)!!!!!!!!
    也谢vceagle(昊帆) 的关注!!!
      

  6.   

    哧哧,又优化了一点:SELECT f.nFriendID, f.strGroupName, u.strNickname 
    FROM Friend f,UserData u, UserData w 
    WHERE u.ID=f.nFriendID And f.nUserID = w.ID And w.strCDKEY = 'asdgar'