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