我们有两个表,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个值丢失,如何获得所需的输出?