2012-12-17 29 views
1

請高手指點,我有三張表,我需要使用LEFT JOIN來選擇數據; ,並且我需要按字段q(存在於table3中)但僅在state = 1的情況下(也存在於table3中)訂購。如何訂購按字段但內部有條件?

我試過,但它不工作:

SELECT * FROM table 1 
     LEFT JOIN table2 ON x = y 
     LEFT JOIN table3 ON z=w 
     WHERE w = 1 
     ORDER BY q IN (SELECT q FROM table3 WHERE state = 1); 

請有什麼建議?

回答

3

如何生根粉這一點:

SELECT * FROM table 1 
     LEFT JOIN table2 ON x = y 
     LEFT JOIN table3 ON z=w 
     WHERE w = 1 
     ORDER BY case when state=1 then 0 else 1 end,q 
0

試試這個:

SELECT *, 
    (SELECT q FROM table3 WHERE state = 1) as sort_order 
FROM table 1 
    LEFT JOIN table2 ON x = y 
    LEFT JOIN table3 ON z=w 
WHERE w = 1 
ORDER BY sort_order 

由於我不知道期望的結果應該是什麼,可能這是正確的查詢:

SELECT * 
FROM table1 as t1 
    LEFT JOIN table2 as t2 ON t1.x = t2.y 
    LEFT JOIN table3 as t3 ON t2.z = t3.w AND t3.state = 1 
WHERE t3.w = 1 
ORDER BY t3.q 
0

試試這樣的:

SELECT * FROM table 1 
     LEFT JOIN table2 ON x = y 
     LEFT JOIN table3 ON z=w 
     WHERE w = 1 AND table3.state = 1 
     ORDER BY q