繁体   English   中英

尝试在 mysql 中加入多个表 - 得到错误 1054,未知列

[英]Trying to join multiple tables in mysql - get error 1054, Unknown Column

我想使用 JOIN 连接多个表,而 mysql/mariadb 拒绝找到一列。 当然,该专栏存在,我无法弄清楚原因可能是什么。

表格布局

CREATE TABLE `shops` (
  `id` int(11) NOT NULL,
  `name` varchar(32) NOT NULL,
);

CREATE TABLE `shops2categories` (
  `shopid` int(11) NOT NULL,
  `categoryid` int(11) NOT NULL,
);

CREATE TABLE `categories` (
  `id` int(11) NOT NULL,
  `name` varchar(64) NOT NULL,
);

CREATE TABLE `categories2items` (
  `itemid` int(11) NOT NULL,
  `categoryid` int(11) NOT NULL
);

CREATE TABLE `items` (
  `id` int(11) NOT NULL,
  `name` varchar(32) NOT NULL,
);

查询:为了避免与别名混淆,我现在使用原始表名运行查询。

SELECT
shops.name,
categories.name,
items.name

FROM shops

LEFT JOIN shops2categories ON shops2categories.shopid = shops.id
LEFT JOIN categories2items ON categories2items.categoryid = categories.id

LEFT JOIN categories ON categories.id = shops2categories.categoryid
LEFT JOIN items ON items.id = categories2items.itemid

错误信息:

#1054 - Unknown column 'categories.id' in 'on clause'

无论我如何重组我的查询(外键优先,主键优先,项目表优先,类别表优先,......,使用不同的 JOIN 类型),我似乎都无法让它工作。 我也通读了很多关于这个主题的 SO 问题,但我觉得顺序是正确的,我不是插入也不是更新,也不是引用。 我的概念从根本上被打破了,我非常渴望了解这可能是什么。

看看你的from子句。 您在定义c之前引用c.id

FROM子句中定义表之前,不能引用它。

你似乎想要:

FROM shops s LEFT JOIN
     shops2categories s2c
     ON s2c.shopid = s.id LEFT JOIN
     categories c
     ON c.id = s2c.categoryid LEFT JOIN
     categories2items c2i
     ON c2i.categoryid = c.id LEFT JOIN
     items i
     ON i.id = c2i.itemid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM