2017-09-20 34 views
-1

數據庫:SQL - 多用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 

問題:我不懂propper使用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 

試圖通過語法創建代碼。這是正確的?

+1

看起來很好。你有預期的結果嗎? – jarlh

+0

'JOINs'最終創建了涉及表的行的幾個組合,具體取決於它的類型 - 「INNER,OUTER,LEFT,RIGHT,」等。where子句過濾掉相關的。 –

+0

Iam通過紙張學習。 –

回答

1

我不懂propper使用INNER JOIN的這裏和那裏 條款

INNER JOIN將從一個特定的表返回常用的數據兩個表,並WHERE子句將完善數據之間

我想所有的租賃汽車(= 1),其目前的里程, 客戶名稱和組受到了客戶的郵政編碼

根據您的查詢,您正在做order by Customer.Zipcode ASC。因此,有在GROUP BYORDER BY

+0

更具體的問題: 首先從僅用於汽車,爲什麼不爲客戶和合同? 2nd: 語法總是這樣嗎? = = t1.primarykey t2.fkey t2.fkey = t3.fkey? –

+0

@ChrisLi裝置??你需要指出我缺少的是什麼 – Ravi

0

看起來你也想加入使用ContractID客戶表的區別 - 我讀表結構的方式,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 
+0

啊好的, 所以我需要在「最後」內部加入中互相比較每個表格以獲得客戶結果: 語法如: 從t1 INNER JOIN t2 on t1 .PRIK = t2.FKEY t2.FKEY = t3上的內部聯接t3 FKEY && t2.FKEY = t3.FKEY 正確嗎? –

+0

不一定。這一切都取決於你加入的具體表格。你可以把t2的外鍵換成t1,t3的外鍵換成t2但與t1沒有關係,你仍然可以加入所有的3. –

+0

啊好吧,在這種情況下需要最後一次比較,以得到實際的車主的「車主」,而不是所有舊的「車主」關閉數據庫。 –