SQL忽略空值匹配

时间:2015-04-03 07:42:46

标签: mysql sql join null

我们有两个表,tableA如下: tableA:

╔═════╦═════╦═══════╦═══════╗
║ id1 ║ id2 ║ data1 ║ data2 ║ 
╠═════╬═════╬═══════╬═══════╣
║  1  ║  1  ║  aa1  ║  aa2  ║
║  2  ║  2  ║  bb1  ║  bb2  ║
║  3  ║  3  ║  cc1  ║  cc2  ║
║  4  ║  3  ║  null ║  null ║
╚═════╩═════╩═══════╩═══════╝

id,id1 = id2,然后该行具有正确的数据,否则id2指的是具有正确数据的行...

和tableB如下:

╔═══════╦═══════╗
║ look1 ║ look2 ║
╠═══════╬═══════╣
║   1   ║   2   ║
║   2   ║   3   ║
║   3   ║   4   ║
║   4   ║  null ║
╚═══════╩═══════╝

我需要tableC(输出)如下, 表C:

╔═══════╦═══════╦═══════╦═══════╗
║ look1 ║ data1 ║ look2 ║ data2 ║
╠═══════╬═══════╬═══════╬═══════╣
║   1   ║  aa1  ║   2   ║  bb2  ║
║   2   ║  bb1  ║   3   ║  cc2  ║
║   3   ║  cc1  ║   4   ║  cc2  ║
║   4   ║  cc1  ║  null ║  null ║
╚═══════╩═══════╩═══════╩═══════╝

我尝试了这个查询:

Select tableB.look1, b.data1, tableB.look2, d.data2
from tableB, tableA a, tableA b, tableA c, tableA d
where
a.id2 = b.id2 --self join to skip to referencing row
and
a.id1 = tableB.look1
and
b.data1!=null;
and
c.id2 = d.id2
and
c.id1 = tableB.look2;

这给了我,

╔═══════╦═══════╦═══════╦═══════╗
║ look1 ║ data1 ║ look2 ║ data2 ║
╠═══════╬═══════╬═══════╬═══════╣
║   1   ║  aa1  ║   2   ║  bb2  ║
║   2   ║  bb1  ║   3   ║  cc2  ║
║   3   ║  cc1  ║   4   ║  cc2  ║
╚═══════╩═══════╩═══════╩═══════╝

第4个值丢失,如何获得所需的输出?

0 个答案:

没有答案