SQL - WHERE&的多个连接订购

时间:2017-09-20 14:35:04

标签: sql oracle select sql-order-by where

数据库:

    Car:                          Contract:          Customer:
    Carplate (PRKEY)              Contractid(PRKEY)  CustomerID(PRIK)
    PRICE                         Miles              Customername
    Leased(0Free- 1Leased)        Carplate(FKEY)     Zipcode
                                                     ContractID FKEY)
                                                     Carplate(FKEY)

我希望所有租用的汽车(= 1)的当前里程客户名称分组(错误订购)客户的邮政编码

语法

SELECT * 
FROM table1 INNER JOIN table2 ON 
     table1.primaryKey=table2.FKEY INNER JOIN 
     table3 ON table2.primaryKey=table3.FKEY

问题:我不明白这里的INNER JOIN的使用者和where子句。

Select Car.Leased, Contract.Miles, Customer.Customername, Customer.Zipcode
From Car 
INNER JOIN Contract  on Car.Carplate = Contract.Carplate
INNER JOIN Customer  on Contract.Carplate = Customer.Carplate
where Car.Leased = 1
order by Customer.Zipcode ASC

尝试通过语法创建代码。这是对的吗?

2 个答案:

答案 0 :(得分:1)

  

我不明白INNER JOIN在这里的使用者和地点   条款

INNER JOIN将返回两个表之间的公共数据WHERE子句将从一个特定表中优化数据。

  

我希望所有租用的汽车(= 1)以他们当前的里程,   客户名称和按客户的邮政编码分组

根据您的查询,您正在进行order by Customer.Zipcode ASC。因此,GROUP BYORDER BY

存在差异

答案 1 :(得分:0)

看起来您还希望使用ContractID加入Customer表 - 我正在阅读表结构的方式,如果汽车被重新出售,Carplate可以显示给多个客户。您也不一定需要选择租借,因为您知道您只获得租约= 1的记录。但是如果您想将其保留为完整性检查,则不会造成任何伤害。

SELECT Contract.Miles, Customer.Customername, Customer.Zipcode
FROM Car
INNER JOIN Contract ON Car.Carplate = Contract.Carplate
INNER JOIN Customer ON Contract.Contractid = Customer.ContractID AND 
Car.Carplate = Customer.Carplate
WHERE Car.Leased = 1
ORDER BY Customer.Zipcode ASC