MySQL-选择查询时出现内部联接错误1052

时间:2020-04-10 12:00:00

标签: mysql sql join select group-by

我正在尝试对表进行选择查询,然后再进行内部联接,以将所有者的数据链接到猫

ownercat在链接到ownerinfo id的id上使用外键

{:scopes #js ["https://www.googleapis.com/auth/userinfo.profile" "https://www.googleapis.com/auth/userinfo.email"], :serverAuthCode nil, :idToken "eyJhb...", :user #js {:photo "http://photo.jpg", :email "fubar@fu.bar", :familyName "Bar", :givenName "Fu", :name "Fu Bar", :id "1234"}}

我得到以下错误: 错误代码:1052。where子句中的列“ ID”含糊不清0.0014秒

删除concat区别语句仍然会产生相同的错误,我不确定如何解决此问题

2 个答案:

答案 0 :(得分:2)

您需要定义ID子句中的WHERE来自哪个表(可以使用别名)。其次,在使用GROUP_CONCAT时,查询中应该包含GROUP BY

SELECT
  oi.ID, 
  oi.First_Name, 
  oi.Last_Name, 
  oi.Phone, 
  oi.AddrL1, 
  oi.AddrL2, 
  oi.AddrL3, 
  oi.PostCode,
  GROUP_CONCAT(DISTINCT oc.Chip_ID)
FROM OWNERINFO oi
  INNER JOIN OWNERCAT oc ON oc.ID=oi.ID
WHERE oi.ID = 1
GROUP BY oi.ID

答案 1 :(得分:1)

问题出在WHERE子句中:ID模棱两可,因为该列在两个表中均可用。

您可能会认为,由于您正在联接ID上的表,因此数据库能够判断出它具有相同的值,但实际上并非如此。

因此只需限定WHERE子句中的列即可,即更改此内容:

WHERE ID = 1

要:

WHERE OWNERINFO.ID = 1

或等效的内容:

WHERE OWNERCAT.ID = 1

还请注意,您的查询使用GROUP_CONCAT(),这是一个聚合函数。这意味着您需要一个GROUP BY子句,该子句应列出所有未聚合的列(即,除GROUP_CONCAT()内的列以外的 all 列)。