2013-05-06 69 views
1

,所以我有這個疑問使用IF語句獲取取決於左側的所有領域JOIN

SELECT IF(c2.nid IS NULL, c.*, c2.*) FROM table1 c LEFT JOIN table1 c2 ON c.cid = c2.pid WHERE c.pid = 0 AND c.nid = 674662; 

注意,C和C2指的是表1 ....基本上,我希望它這樣,如果左連接條目存在,它將返回左連接的c2行,而如果它不存在,它將返回c1中的條目...

但是,執行此查詢會產生mysql語法錯誤..我如何去完成即將完成的任務(最好在單個IF語句中)?

回答

0

由於@luksch的回答,您可以通過使用每次你需要列IF()COALESCE()功能做到這一點。

,我能想到的唯一的辦法是用UNION和分裂兩種情況:

SELECT c2.* 
FROM table1 c 
    INNER JOIN table1 c2 ON c.cid = c2.pid 
WHERE c.pid = 0 AND c.nid = 674662 

UNION ALL 

SELECT c.* 
FROM table1 c 
    LEFT JOIN table1 c2 ON c.cid = c2.pid 
WHERE c.pid = 0 AND c.nid = 674662 
    AND c2.pid IS NULL ; 
2

我擔心你不能使用IF聲明中的星型。所以,你需要明確地鍵入它像

SELECT IF(c2.nid IS NULL, c.cid, c2.cid), 
     IF(c2.nid IS NULL, c.pid, c2.pid), ... 
FROM table1 c LEFT JOIN table1 c2 ON c.cid = c2.pid 
WHERE c.pid = 0 AND c.nid = 674662;