MYSQL PHP语法别名联接

MYSQL PHP语法别名联接,mysql,join,syntax,alias,Mysql,Join,Syntax,Alias,我正在尝试对两个表进行查询,在这两个表中存在公共字段名的情况下进行左联接。我模糊的理解是MYSQL不记得某些表的首字母,所以最好使用别名。但是,以下查询在别名muserid上引发未知列错误 如果您能就如何修复提出建议,我们将不胜感激 $sql= "SELECT c.id as cid, c.*,m.userid as muserid FROM `contacts` c LEFT JOIN `mycontacts` m ON cid = personid WHERE muserid = '$use

我正在尝试对两个表进行查询,在这两个表中存在公共字段名的情况下进行左联接。我模糊的理解是MYSQL不记得某些表的首字母,所以最好使用别名。但是,以下查询在别名muserid上引发未知列错误

如果您能就如何修复提出建议,我们将不胜感激

$sql= "SELECT c.id as cid, c.*,m.userid as muserid
FROM `contacts` c
LEFT JOIN `mycontacts` m
ON cid = personid
WHERE muserid = '$userid' "; 

这与加入无关。在MySQL中,
SELECT
语句在
WHERE
FROM
子句之后求值,因此您不能在
WHERE
子句中引用别名。请尝试以下方法:

SELECT *
FROM
(
    SELECT c.id as cid, c.*,m.userid as muserid
    FROM `contacts` c
    LEFT JOIN `mycontacts` m ON c.id = m.personid
) t
WHERE muserid = '$userid';
以下是MySQL查询执行顺序1:

  • FROM子句
  • WHERE子句
  • 分组依据子句
  • 有从句
  • SELECT子句
  • 按条款排序

1:

当您选择
c.*
时,为什么您必须再次选择
c.id
?on子句中的未知列“cid”此评论已由操作系统在我的回答中发布:“它有一些东西可以识别第一个表的首字母,但不能识别第二个表的首字母,反之亦然。”–user1260310@user1260310-改为在c.id=m.personid上尝试
,如我更新的答案中所示。在执行顺序优先性方面,Mahmoud有很好的把握。因为@user1260310想要使用别名,所以这个问题变得很有趣。但是如果你决定使用首字母缩写,它就行了*