gpt4 book ai didi

mysql - 多次加入同一个表会引发错误

转载 作者:行者123 更新时间:2023-11-30 00:13:32 24 4
gpt4 key购买 nike

我有以下 mysql 代码

SELECT * FROM `user_credentials` 
JOIN `friends` ON `friends`.`1stpal` = `user_credentials`.`cred_regiden`
JOIN `friends` ON `friends`.`2ndpal` = `user_credentials`.`cred_regiden`
WHERE (`cred_fname` LIKE'".$search_text. "%') AND (`friends`.`1stpal` = '$current_user'
OR `friends`.`2ndpal` = '$current_user') LIMIT 0, 5;

我尝试加入“ friend ”表两次,这会引发错误:不是唯一的表/别名:“ friend ”。当我将脚本更改为以下时,

SELECT * FROM `user_credentials` 
JOIN `friends` AS `f1` ON `friends`.`1stpal` = `user_credentials`.`cred_regiden`
JOIN `friends` AS `f2` ON `friends`.`2ndpal` = `user_credentials`.`cred_regiden`
WHERE (`cred_fname` LIKE'".$search_text. "%') AND (`friends`.`1stpal` = '$current_user'
OR `friends`.`2ndpal` = '$current_user') LIMIT 0, 5;

现在显示:未知列“friends.1stpal”。当我运行单一连接时,它工作得很好。但这不是我想要的,我想要两个表中的结果。

最佳答案

多次加入同一个表时需要使用表别名(缩写)。需要在整个查询中使用它们来消除列的歧义:

SELECT *
FROM `user_credentials` uc JOIN
`friends` `f1`
ON f1.`1stpal` = uc.`cred_regiden` JOIN
`friends` `f2`
ON f2.`2ndpal` = uc.`cred_regiden`
WHERE (uc.`cred_fname` LIKE'".$search_text. "%') AND
'$current_user' in (f1.`2ndpal`, f2.`1stpal`)
LIMIT 0, 5;

注意:我猜测的是 where 子句中的第二个条件。可能是:

 '$current_user' in (f2.`2ndpal`, f1.1stpal`)

更多评论:

  • 如果您使用表别名,为了便于阅读,您也可以将它们用于所有表。
  • 不要在不需要的列名称周围使用反引号。它们只会让查询变得困惑。
  • 在没有 order by 的情况下使用 limit 可能会很危险。返回的行将匹配,但可能会因查询而异。
  • in 比长序列的 表达式(甚至短序列)更容易编写和理解。

关于mysql - 多次加入同一个表会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23851508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com