2013-05-06 151 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;