我有一个关于联接的问题。如何获取指定名称的客户的所有订单。
在我的结果中,我只想拥有“订单”表中的所有列和“客户”表中的零列。在这里你可以看到表格: https://www.w3schools.com/sql/sql_join.asp
SELECT *
FROM Orders
LEFT JOIN Customers
ON Orders.CustomerID=Customers.CustomerID
WHERE CustomerName = "Wilman Kala"
我在这里测试了这个: https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_join 它返回两个表中的所有列。
预先感谢您的帮助。
在
*
之前添加表名称。
SELECT orders.*
FROM Orders
LEFT JOIN Customers ON Orders.CustomerID=Customers.CustomerID
WHERE CustomerName = "Wilman Kala"
或者更好地命名您要选择的每一列
select orders.col1, orders.col2, ...
如果您只需要
Orders
中的列,您可以考虑 IN
或 EXISTS
:
SELECT o.*
FROM Orders o
WHERE EXISTS (SELECT 1
FROM Customers c
WHERE o.CustomerID = c.CustomerID AND
c.CustomerName = 'Wilman Kala'
);
这与
JOIN
版本略有不同。如果两个客户具有相同的姓名,则每个订单只会返回一次。在带有JOIN
的版本中,如果名称重复,订单也会重复。
通常,不重复行为就是您想要的。
尝试:
SELECT O.*
FROM Orders O
LEFT JOIN Customers C ON O.CustomerID=C.CustomerID
WHERE C.CustomerName = 'Wilman Kala'