2017-08-12 42 views
1

我有一個關於連接的問題。如何獲得具有指定名稱的所有客戶訂單。SQL連接,從一個表中獲取數據

在我的結果中,我只想要「訂單」表中的所有列和「客戶」表中的零列。在這裏你可以看到表: 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 它返回兩個表中的所有列。

在此先感謝您的幫助。

回答

1

*之前添加表名。

SELECT orders.* 
FROM Orders 
LEFT JOIN Customers ON Orders.CustomerID=Customers.CustomerID 
WHERE CustomerName = "Wilman Kala" 

或者更好的名字要選擇

select orders.col1, orders.col2, ... 

BTW W3Schools的每一個欄是一個可怕的教程網站。

0

嘗試:

SELECT O.* 
FROM Orders O 
LEFT JOIN Customers C ON O.CustomerID=C.CustomerID 
WHERE C.CustomerName = 'Wilman Kala' 
+1

謝謝,不幸的是我有很少的點票投了 – kkk

1

如果只想從Orders列,你可能會考慮INEXISTS

SELECT o.* 
FROM Orders o 
WHERE EXISTS (SELECT 1 
       FROM Customers c 
       WHERE o.CustomerID = c.CustomerID AND 
        c.CustomerName = 'Wilman Kala' 
      ); 

這個做了從JOIN版本略有不同。如果兩個客戶具有相同的名稱,則這將僅返回每個訂單一次。在JOIN的版本中,如果名稱重複,訂單將被複制。

通常情況下,非重複行爲是你想要的。

+0

爲什麼不...'Where Where CustomerID IN(SELECT CustomerID ...)'? –

+0

@CL。 。 。 。你可以做到這一點。由於'NOT EXISTS'優於'NOT IN'語義(它們處理'NULL'的方式不同),所以我傾向於在'IN'上使用'EXISTS'。 –

相關問題