MySQL:连接两个表

MySQL:连接两个表,sql,mysql,join,Sql,Mysql,Join,我在设计正确的SQL查询时遇到问题。我今天累得要命,工作了12个荷鲁斯(截止日期很快),找不到问题 表: buddies | userid | buddyid users | id | username 现在,我想做的是: 查询所有用户好友的表buddies(当ID=userid或ID=buddyid时)。没有问题 当我试图加入users表以获取用户名时出现问题,用户名为空,无法找到原因 你愿意帮我吗 以下是工作查询(但返回空用户名) 提前感谢您的帮助。我非常确定这是一个小虫子(由我引起的),

我在设计正确的SQL查询时遇到问题。我今天累得要命,工作了12个荷鲁斯(截止日期很快),找不到问题

表:

buddies | userid | buddyid
users | id | username
现在,我想做的是: 查询所有用户好友的表buddies(当ID=userid或ID=buddyid时)。没有问题

当我试图加入users表以获取用户名时出现问题,用户名为空,无法找到原因

你愿意帮我吗

以下是工作查询(但返回空用户名)

提前感谢您的帮助。我非常确定这是一个小虫子(由我引起的),但真的找不到它。在这上面花了一个多小时,然后决定问

问候,,
Tom

一个小错误是,在条件中使用了不正确的引号

改变

 'users.id' = 'buddyid' OR 'users.id' = 'userid' 


一个小错误是在条件中使用了不正确的引号

改变

 'users.id' = 'buddyid' OR 'users.id' = 'userid' 


如果你认为这是引语,试试这个:

   SELECT username 
   FROM users_buddies ub
       LEFT JOIN users u 
         ON u.id In (ub.userId, ub.buddyid)
   SELECT b.username 
   FROM users_buddies ub
       LEFT JOIN users b 
         ON b.id = ub.buddyid
   Where ub.userid = 1
其次,你的Where条件没有意义。如果只希望出现一个名称,则可以将其限制为
userid=1
buddyId=1
。。(这是同一个用户,无论他是user_buddies中的用户还是user_buddies中的好友)

如果您想要查找用户ID为1的所有好友,请尝试以下操作:

   SELECT username 
   FROM users_buddies ub
       LEFT JOIN users u 
         ON u.id In (ub.userId, ub.buddyid)
   SELECT b.username 
   FROM users_buddies ub
       LEFT JOIN users b 
         ON b.id = ub.buddyid
   Where ub.userid = 1
甚至更好

  Select u.username User, b.username Buddy
  From users_buddies ub
       LEFT JOIN users u 
         ON u.id = ub.userid 
       LEFT JOIN users b 
         ON u.id = ub.buddyid          
  Where ub.userid = 1

如果你认为这是引语,试试这个:

   SELECT username 
   FROM users_buddies ub
       LEFT JOIN users u 
         ON u.id In (ub.userId, ub.buddyid)
   SELECT b.username 
   FROM users_buddies ub
       LEFT JOIN users b 
         ON b.id = ub.buddyid
   Where ub.userid = 1
其次,你的Where条件没有意义。如果只希望出现一个名称,则可以将其限制为
userid=1
buddyId=1
。。(这是同一个用户,无论他是user_buddies中的用户还是user_buddies中的好友)

如果您想要查找用户ID为1的所有好友,请尝试以下操作:

   SELECT username 
   FROM users_buddies ub
       LEFT JOIN users u 
         ON u.id In (ub.userId, ub.buddyid)
   SELECT b.username 
   FROM users_buddies ub
       LEFT JOIN users b 
         ON b.id = ub.buddyid
   Where ub.userid = 1
甚至更好

  Select u.username User, b.username Buddy
  From users_buddies ub
       LEFT JOIN users u 
         ON u.id = ub.userid 
       LEFT JOIN users b 
         ON u.id = ub.buddyid          
  Where ub.userid = 1

为什么要使用`字符作为对象名称

SELECT username 
FROM users_buddies    
LEFT JOIN users ON ( users.id = 'buddyid' 
OR users.id = 'userid' ) 
WHERE userid =1 
OR buddyid =1 

为什么要使用`字符作为对象名称

SELECT username 
FROM users_buddies    
LEFT JOIN users ON ( users.id = 'buddyid' 
OR users.id = 'userid' ) 
WHERE userid =1 
OR buddyid =1 

现在每个人都发现了,不应该是这样吗

SELECT username 
    FROM users_buddies LEFT JOIN
         users ON (users.id = buddyid OR users.id = userid) 
    WHERE userid  = 1 OR
          buddyid = 1;

所有这些“标记”到底是什么意思?

现在每个人都发现了,不应该是这样吗

SELECT username 
    FROM users_buddies LEFT JOIN
         users ON (users.id = buddyid OR users.id = userid) 
    WHERE userid  = 1 OR
          buddyid = 1;

所有这些“标记”到底是什么意思?

正如其他人所观察到的,你使用了错误的引号

字符用于引用字符串,而不是对象。因此,您正在进行一对字符串比较。字符串
'user.id'
永远不会等于字符串
'buddyid'
,对于其他比较,同上,因此查询不会返回任何结果

对于引用对象(表、列等),必须使用反引号字符“”

仅当对象的名称与保留字相同或包含非标准字符(空格等)时,才需要对对象加引号。因此,在这个查询中,实际上不需要任何引号字符


在我看来,如果你必须引用一个对象,这是一个很好的迹象,表明你不应该使用这个特定的名称。

正如其他人所观察到的,你使用了错误的引号

字符用于引用字符串,而不是对象。因此,您正在进行一对字符串比较。字符串
'user.id'
永远不会等于字符串
'buddyid'
,对于其他比较,同上,因此查询不会返回任何结果

对于引用对象(表、列等),必须使用反引号字符“”

仅当对象的名称与保留字相同或包含非标准字符(空格等)时,才需要对对象加引号。因此,在这个查询中,实际上不需要任何引号字符


在我看来,如果你必须引用一个对象,这是一个很好的迹象,说明你不应该使用这个特定的名称。

谢谢你,杰默斯。我想,也许在这种情况下,最好不要在表名中使用保留字。谢谢你,jsummers。我认为,在这种情况下,最好不要对表名使用保留字。