我根本不了解MySQL连接。我卡住

时间:2016-11-04 07:45:46

标签: mysql join

所以我正在尝试学习一些MySQL,我已经对Joins有所了解。它正在努力。

我正在努力完成一些练习并且没有在哪里练习。

目前的练习要求:

使用1994年之前的SQL语法(即不使用INNER JOIN语法)显示订单日期,订单号和发货到的订单的发货人公司名称 葡萄牙。按订单日期的升序对输出进行排序。

我目前输入了这个:

SELECT OrderDate, OrderID, ShipperID FROM Shippers Orders
WHERE shippers.shipperID = orders.shipperID AND orders.shipcountry = 'Portugal';

但是我收到此错误消息: 错误代码:1054。“字段列表”中的未知列'OrderDate'

我做错了什么?另外,我可以提供什么来帮助你们帮助我?

OrderDate确实存在,正如您在此处截图'Select * from Orders'中所见 enter image description here

所以我想这是类似的,但有一个不同的加入过程。

提前谢谢!

3 个答案:

答案 0 :(得分:0)

您必须使用带有列名的表名来标识哪个列属于哪个表。

SELECT orders.OrderDate, orders.OrderID,shippers.ShipperID FROM Shippers, Orders
WHERE shippers.shipperID = orders.shipperID AND orders.shipcountry = 'Portugal';

或者你可以使用别名来编写查询。

SELECT b.OrderDate, b.OrderID, a.ShipperID FROM Shippers a, Orders b
    WHERE a.shipperID = b.shipperID AND b.shipcountry = 'Portugal';

希望这会有所帮助。

答案 1 :(得分:0)

你可以这样使用。

 SELECT o.OrderDate, o.OrderID, s.ShipperID FROM Shippers s, Orders o
 WHERE s.shipperID = o.shipperID AND o.shipcountry = 'Portugal';

答案 2 :(得分:0)

  

使用1994年以前的SQL语法

听起来培训课程很长一段时间(尽管日期错了;可能应该是1989年)!

这里的教训是,在两个表之间进行关系产品操作(又名CROSS JOIN以使用1992术语,它仍然在核心标准SQL之外)迫使你使用SQL的点限定引用。表单<range variable reference>.<column reference>以消除歧义列重复引用的内容(例如,在您的情况下,shipperID出现在两个表中)。

我猜最终目的地是NATURAL JOIN,完全免除了对范围变量的需求!