我有两张桌子。
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'
并且不知道它来自哪里:(
答案 0 :(得分:4)
使用USING
时,两个表中的列名必须相同。您在id_employee
表格中没有employee
。所以你应该使用它来代替使用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 docs:
USING(column_list)子句指定必须存在的列的列表 在两个表中。如果表a和b都包含列c1,c2和c3, 以下连接比较两个表中的相应列
答案 1 :(得分: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
。
答案 2 :(得分:1)
您通过USING(id_employee)加入,但这在您的employees表中不存在。因此,加入员工身份
答案 3 :(得分:0)
怀疑缺少列 检查创建表格时输入的内容
SHOW CREATE TABLE table_name
或只看表格的列
DESC table_name
在调试此类错误时,这可能会有所帮助。