Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图连接mysql中的多个表-获取错误1054,未知列_Mysql_Sql_Join_Mariadb - Fatal编程技术网

试图连接mysql中的多个表-获取错误1054,未知列

试图连接mysql中的多个表-获取错误1054,未知列,mysql,sql,join,mariadb,Mysql,Sql,Join,Mariadb,我想使用连接连接多个表,而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

我想使用连接连接多个表,而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'

无论我如何重新构造我的查询(外键优先、主键优先、项表优先、类别表优先……,使用不同的联接类型),我似乎都无法实现这一点。我也读了很多关于这个主题的问题,但我觉得顺序是正确的,我没有插入或更新,也没有引用。在我的概念中,有些东西根本上被打破了,我非常渴望了解这可能是什么。

看看你的
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

这回答了你的问题吗<代码>c.id在别名
c
之前被引用defined@P.Salmon,谢谢,我来看看!谢谢,戈登!它不是开箱即用的,我必须使用没有任何别名的表名,但是——它可以工作。谢谢