SQL查询帮助 - 加入

时间:2018-04-29 11:59:11

标签: sql join

我有几个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";

那会是正确的吗?我的想法是我需要加入桌子,因为无法知道客户租了哪辆车,但我觉得我可能做错了什么?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

不,您的查询不正确 - 逻辑上不正确,写得不好。

编写查询的更好方法是使用正确的,明确的标准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';

注意:

  • 您错过JOINCONTRACT之间的CAR条件(大概)。使用明确的JOIN语法,这非常明显。
  • 我猜JOIN的正确CAR条件。
  • 对字符串常量使用单引号。这是SQL标准,尽管有些数据库也允许使用双引号。
  • SELECT *通常是气馁的。列出列通常是更好的做法,特别是在这种情况下,当相同的列名称可能出现在不同的表中时。

答案 1 :(得分:0)

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对同一问题的回答

答案 2 :(得分:0)

这应该有所帮助:(根据您的要求,您无需担心电台)

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';