所以我正在尝试学习一些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'中所见
所以我想这是类似的,但有一个不同的加入过程。
提前谢谢!
答案 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
,完全免除了对范围变量的需求!