CASE和IF查询仅返回一个条件结果

时间:2015-09-22 08:58:00

标签: mysql join case

 SELECT a.*, IF(b.pid=a.id,b.id,0) AS bpid 
 FROM table1 a, table2 b 
 ORDER BY a.datetime DESC;

我在table1 a中有十五条记录,在table2 b中有两条记录b.pid=a.id

在任何给定时间,表b中只有其中一条记录被拉入结果中。两者都应该作为bpid拉入,但只有两者中的后者才行。

我也尝试过使用CASE(事先尝试CASE):

 SELECT a.*, (CASE WHEN b.pid=a.id THEN b.id ELSE NULL END) AS bpid 
 FROM table1 a, table2 b 
 ORDER BY a.datetime DESC;

我错过了什么?

为清楚起见:我从结果中得到了table1a中的所有15条记录,但没有得到来自table2 b的两条记录。

1 个答案:

答案 0 :(得分:0)

您没有正确加入表格。作为提示只是停止在FROM子句中使用逗号,这将有助于您考虑连接应该是什么。

/* for all records */
SELECT
      a.*
    , b.id AS bpid
FROM table1 a
LEFT JOIN table2 b ON a.id = b.id
ORDER BY a.DATETIME DESC

/* for only matching records */
SELECT
      a.*
    , b.id AS bpid
FROM table1 a
INNER JOIN table2 b ON a.id = b.id
ORDER BY a.DATETIME DESC