3

我有两张桌子。

i) order_details:

CREATE TABLE `order_details` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `content` text,
  `id_employee` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_id_employee` (`id_employee`),
  CONSTRAINT `FK_id_employee` FOREIGN KEY (`id_employee`) REFERENCES `employees` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

ii) 雇员:

 CREATE TABLE `employees` (   `id` INT(11) NOT NULL AUTO_INCREMENT,   `firstname` text NOT NULL,   `lastname` text NOT NULL,   `salary` FLOAT DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 ;

我想获取员工 3 负责的订单的名字、姓氏和详细信息。我用这个:

SELECT lastname, firstname, content FROM order_details INNER JOIN employees USING (id_employee) WHERE id_employee = 3;

但我收到此错误消息:ERROR 1054 (42S22): Unknown column 'id_employee' in 'from clause'并且不知道它来自哪里:(

4

4 回答 4

5

使用时USING列的名称在两个表中必须相同。您没有id_employeeemployee表中。所以你应该使用它来代替它使用ON条件来连接两个表:

SELECT e.lastname, e.firstnam, o.content 
FROM order_details o
INNER JOIN employees e
  ON  o.id_employee = e.id 
WHERE o.id_employee = 3;

来自MySQL 文档

USING(column_list) 子句命名必须存在于两个表中的列列表。如果表 a 和 b 都包含列 c1、c2 和 c3,则以下连接将比较两个表中的对应列

于 2013-01-08T10:35:32.750 回答
2

order_details确实有一个id_employee列,但员工表没有。利用

SELECT lastname, firstnam, content
FROM order_details od
INNER JOIN employees e on od.id_employee = e.id
WHERE od.id_employee = 3;

为了加入不同的列名。using如果两个表中的列名相同,则可以使用。

于 2013-01-08T10:35:20.077 回答
1

您正在通过 USING ( id_employee ) 加入,但这在您的员工表中不存在。所以加入员工ID

于 2013-01-08T10:35:04.490 回答
0

如果对缺少的列有疑问,请检查您在创建表时输入的内容

SHOW CREATE TABLE table_name

或只查看表格的列

 DESC table_name

这在调试此类错误时会很有帮助。

于 2013-01-08T12:27:20.353 回答