簡體   English   中英

SQL查詢幫助-聯接

[英]SQL Query help - Joins

我有幾個SQL表:

customer(Id, Name, Address, PhoneNumber);
station (Id, City, Country, Location);
car(Id, Reg, Type, Milage);
contract(CustId, StationId, CarId);

我需要使用這些表來查找所有租借寶馬的客戶。 我已將查詢寫為:

SELECT *
FROM CUSTOMER, CAR, CONTRACT
WHERE CUSTOMER.ID = CONTRACT.CUSTID
AND CAR.TYPE = "BMW";

正確嗎? 我的想法是我需要參加會議,因為無法知道哪個客戶租了哪輛車,但是我感覺自己做錯了什么? 任何幫助,將不勝感激。

不,您的查詢不正確-邏輯上不正確,並且書寫不正確。

編寫查詢的更好方法是使用正確,顯式,標准的JOIN語法:

SELECT *
FROM CONTRACT co JOIN
     CUSTOMER cu
     ON co.CUSTID = cu.ID JOIN
     CAR ca
     ON co.CARID = ca.ID  -- this is a guess
WHERE ca.TYPE = 'BMW';

筆記:

  • 您缺少CONTRACTCAR之間的JOIN條件(大概)。 使用顯式的JOIN語法,這非常明顯。
  • 我猜想CAR處於正確的JOIN條件。
  • 對字符串常量使用單引號。 這是SQL標准,盡管某些數據庫也允許雙引號。
  • 通常不建議使用SELECT * 通常,最好列出這些列,特別是在相同的列名可能出現在不同的表中的情況下。
SELECT co.Id as ContractId , Name, Address, PhoneNumber,
cu.Id as CustId , City, Country, Location,
ca.Id as CarId, Reg, Type, Milage,
FROM CONTRACT co JOIN
CUSTOMER cu
ON co.CUSTID = cu.ID JOIN
CAR ca
ON co.CARID = ca.ID
STATION st
ON co.StationId = st.ID 
WHERE ca.TYPE = 'BMW';

您需要明確提及列名,因為字段ID的名稱會發生​​沖突,這在許多表中都很常見

PS:只需修改來自Gordon Linoff答案的同一問題的查詢

這應該會有所幫助:(您無需根據需要擔心Station)

SELECT distinct cus.*
FROM CONTRACT con 
JOIN CUSTOMER cus ON con.CUSTID = cus.ID 
JOIN CAR car ON co.CARID = car.ID 
WHERE car.TYPE = 'BMW';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM