子查询中引用外部选择的MySQL

子查询中引用外部选择的MySQL,mysql,select,reference,subquery,Mysql,Select,Reference,Subquery,我有两张桌子,货物和顾客。我想把客户的姓氏和货物一起打印出来。表格设置如下: shipments: shipNumber, shipperID, destID, size, weight shipperID和Destind是customers表中的外键 customers: id, lastName, street, city, state, zip. 查询时需要的是如下表: shipNumber, shipperID(customers.id), customer.lastName,

我有两张桌子,货物和顾客。我想把客户的姓氏和货物一起打印出来。表格设置如下:

shipments:  shipNumber, shipperID, destID, size, weight
shipperID和Destind是customers表中的外键

customers:  id, lastName, street, city, state, zip.
查询时需要的是如下表:

shipNumber, shipperID(customers.id), customer.lastName, destID(customers.id), customer.lastName
shipperID和Destind不相同,因此customers.lastName字段应仅与其后面的id字段相关

我当前的查询不起作用,原因很明显:

SELECT shipments.shipNumber, shipments.shipperID, customers.lastName, shipments.destID, 
(SELECT customers.lastName 
FROM shipments, customers 
WHERE shipments.destID = customers.id)

FROM shipments, customers
WHERE shipments.shipperID = customers.id;
我的子查询显然会打印多行,但我希望destID引用的客户的姓氏与shipnumber相关,但我知道mySQL会从内到外查看查询

样本数据:

shipments table
+------------+-----------+---------+------+--------+
| shipNumber | shipperID | destID  | size | weight |
+------------+-----------+---------+------+--------+
| S12345-0   | W-100     | C-22315 |   12 |     12 | 
| SYY89-4    | C-15572   | U-01002 |   12 |     12 | 
+------------+-----------+---------+------+--------+

customers table
+---------+------------------+
| id      | lastName         |
+---------+------------------+
| S-01210 | Home Depot       | 
| S-18537 | Honda            | 
| S-13349 | NCR              | 
| C-15572 | GM               | 
| C-00122 | Delco            | 
| W-100   | Warehouse A      | 
| U-01002 | Wright State     | 
| W-210   | Warehouse B      | 
| U-00013 | AFIT             | 
| C-22315 | Northrop Grumman | 
+---------+------------------+
我希望查询显示的内容:

shipNumber    shipperID    lastName     destID   lastName
S12345-0      W-100        Warehouse A  C-22315  Northrop Grumman

这是提供给我的数据,所以用非姓氏的数据填充lastName列可能只是一个疏忽,所以请继续。

如果我正确理解您的问题,您不需要子查询,您只需要将两个表连接在一起。客户需要加入两次。。一次用于shipperID,一次用于Destind以获取相应的姓氏。这个查询应该可以做到这一点。。见工作


你能给出一些示例数据吗?@JohnRuddell添加了示例数据和查询结果的示例。因为有两个装运,所以查询实际上会打印出两行。您的查询没有打印出最后一个字段。在您收到样本之前,我已响应。。让我做一把小提琴,我会给你打电话的。。我为这些表添加了别名,以便更容易阅读和重新格式化。您必须加入客户两次,一次是托运人姓氏,一次是目的地姓氏。希望这有帮助
SELECT 
    s.shipNumber, 
    s.shipperID, 
    c.lastName AS first_last_name, 
    s.destID, 
    c1.lastName AS second_last_name
FROM shipments s
JOIN customers c ON c.id = s.shipperID
JOIN customers c1 ON c1.id = s.destID