2017-02-27 25 views
0

我有兩個表中的兩個價格,這兩個表加入。我需要按兩個表格中的價格排序。當第一價格爲零或爲零時,則取第二價格,否則取第一價格。所以按部分順序必須改變。訂單在行中的兩列

SQL

SELECT table1.id 
    , table1.price 
    , table2.price FROM table1 
    JOIN table2 
    ON table1.id = table2.f_id 
ORDER 
    BY table1.price ASC 
    , table2.price ASC 

表1

id/price 
1/50 
2/0 
3/NULL 
4/10 

表2

f_id/price 
1/60 
2/30 
3/5 
4/100 

我希望

3/5 
4/10 
2/30 
1/50 

回答

2

您還可以使用情況

SELECT table1.id 
    CASE WHEN table1.price is null THEN table2.price 
     WHEN table1.price = 0 THEN table2.price 
     ELSE tabel1.price 
    END as my_price 
JOIN table2 ON table1.id = table2.f_id 
ORDER BY my_price ASC 
+0

只有選項tbh。當價格爲'0'時,我的答案缺乏。 Musst忽略了那個。 – dognose

+0

Mine是一個使用CASE的建議,這樣所有的條件都是明確可見的,因此可以對sql – scaisEdge

2

ifnull是專爲目的(http://www.mysqltutorial.org/mysql-ifnull/):

SELECT 
    `table1`.id, 
    ifnull(`table1`.price, `table2`.`price`) as finalPrice 
FROM `table1` 
    INNER JOIN `table2` ON table1.id = table2.f_id ORDER BY finalPrice ASC 
+2

請注意,COALESCE()符合ANSI標準 – Strawberry

+0

@Strawberry與之合併的是什麼? – tomasr

+0

@tomasr這是一個非常類似的功能,但它是數據庫不可知的。 – Strawberry

0
SELECT table1.id 
, table1.price 
, table2.price FROM table1 
JOIN table2 
ON table1.id = table2.f_id 
ORDER BY 
    CASE WHEN table1.price is null THEN table2.price 
     WHEN table1.price = 0 THEN table2.price 
     ELSE tabel1.price 
    END ASC 
+0

中不是很有經驗的用戶進行faciltarne理解你確定,我現在有檢查錯誤的語法 – tomasr

+0

,但它會給t1和t2價格分開。 –

0

你可以試試下面的查詢

SELECT 
    t1.id, 
    CASE 
     WHEN t1.price is null THEN t2.price 
     WHEN t1.price = 0 THEN t2.price 
     ELSE t1.price 
    END as finalPrice 
FROM 
    table1 t1, table2 t2 
WHERE 
    t1.id = t2.f_id 
ORDER BY finalPrice 

而不是使用inner join,直接比較使用t1.id = t2.f_id。它會更快。