子查询中引用外部选择的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