1

所以我有这个查询

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 都引用 table1....基本上,我想要它,以便如果存在左连接条目,它将返回左连接 c2 中的行,而如果它不存在,它将返回c1 中的条目...

但是,执行此查询将产生 mysql 语法错误。我该如何完成我试图完成的任务(最好在单个 IF 语句中)?

4

2 回答 2

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;
于 2013-05-06T23:07:13.983 回答
0

正如@luksch 的回答,您可以通过在您需要的每一列上使用IF()或函数来做到这一点。COALESCE()

我能想到的唯一方法是使用 aUNION并拆分两种情况:

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 ;
于 2013-05-06T23:28:08.660 回答