繁体   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