SQL如果第一个表中不存在,则从第二个表中选择数据

时间:2014-12-02 11:56:36

标签: mysql

我正在尝试为NVD3中的堆积条形图设计JSON数据,如果它不存在,则要求密钥为0才能使其正常运行。

我使用以下SQL查询来获取TABLE1的数据

select POSITION, DOE, ID, COUNT(ID) AS COUNTER FROM TABLE1 WHERE
   DOE BETWEEN '2014-12-02 00:00:01' AND '2014-12-02 23:59:59' AND TYPE = 'P' AND 
   POSITION LIKE 'POS%'

TABLE1

POSITION      DOE           ID  COUNTER
POS1      02/12/2014 07:02  12  49
POS2      02/12/2014 07:17  104 17
POS3      02/12/2014 07:07  34  34
POS4      02/12/2014 07:07  21  54
POS5      02/12/2014 07:09  10  51
POS6      02/12/2014 08:42  3   24
POS7      02/12/2014 07:07  10  51
POS8      02/12/2014 07:01  41  46
POS9      02/12/2014 07:08  24  40

我创建了另一个名为TABLE2的表,其列为POSITION和COUNT,并使计数为0。

以下是 TABLE2

的内容
POSITION COUNTER
    POS1    0
    POS2    0
    POS3    0
    POS4    0
    POS5    0
    POS6    0
    POS7    0
    POS8    0
    POS9    0

我需要做的是如果位置POS1在TABLE1中不存在,那么从TABLE2显示位置POS1和计数器0。

因此我会得到一张这样的表 -

POSITION      DOE           ID  COUNTER
POS1                            0
POS2      02/12/2014 07:17  104 17
POS3      02/12/2014 07:07  34  34
POS4      02/12/2014 07:07  21  54
POS5      02/12/2014 07:09  10  51
POS6      02/12/2014 08:42  3   24
POS7      02/12/2014 07:07  10  51
POS8      02/12/2014 07:01  41  46
POS9      02/12/2014 07:08  24  40

我是SQL新手,所以我甚至不知道这是否可行,我搜索过并搜索过,无法找到解决方案。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

我想你想要一个left outer join

select coalesce(t1.position, t2.position) as position,
       t1.DOE, t1.ID, coalesce(t1.COUNTER, t2.COUNTER) as COUNTER
from table2 t2 left join
     (select POSITION, DOE, ID, COUNT(ID) AS COUNTER
      FROM TABLE1
      WHERE DOE BETWEEN '2014-12-02 00:00:01' AND '2014-12-02 23:59:59' AND TYPE = 'P' AND 
            POSITION LIKE 'POS%'
     ) t1
     on t2.position = t1.position;