我有table1(mtrlines),其中3个不同的列包含table1(prsn)中的ID。我需要从table2中选择name2而不是ID
仅对1列运行查询,它将起作用并返回正确的信息: 即
SELECT ['Ins.'].NAME2 AS ['Ins.']
FROM MTRLINES
INNER JOIN PRSN AS ['Ins.'] ON MTRLINES.CCCTABLE01 = ['Ins.'].PRSN
WHERE MTRLINES.FINDOC = 22648
我得到正确的结果:
第1行:FL
第2行:FL
第3行:GP
但是当尝试合并更多列时,它返回空值 即
SELECT ['Ins.'].NAME2 AS ['Ins.'], ['Ins.1'].NAME2 AS ['Ins.1']
FROM MTRLINES
INNER JOIN PRSN AS ['Ins.'] ON MTRLINES.CCCTABLE01 = ['Ins.'].PRSN
INNER JOIN PRSN AS ['Ins.1'] ON MTRLINES.CCCTABLE02 = ['Ins.1'].PRSN
WHERE MTRLINES.FINDOC = 22648
返回空值。
如何获取以下信息?
头:ins。| Ins.1
第1行:FL | EA
第2行:FL | RT
第3行:GP | EA
其中FL,EA等是prsn表的name2列中的值。
答案 0 :(得分:0)
关于数据库和要求,您无需多说。但是给定查询和结果,您似乎没有MTRLINES.FINDOC = 22648和PRSN表中的两个匹配行的任何组合。
如果将联接更改为LEFT OUTER联接,则会看到是否有任何匹配项。像这样:
SELECT ['Ins.'].NAME2 AS ['Ins.'], ['Ins.1'].NAME2 AS ['Ins.1']
FROM MTRLINES
LEFT OUTER JOIN PRSN AS ['Ins.'] ON MTRLINES.CCCTABLE01 = ['Ins.'].PRSN
LEFT OUTER JOIN PRSN AS ['Ins.1'] ON MTRLINES.CCCTABLE02 = ['Ins.1'].PRSN
WHERE MTRLINES.FINDOC = 22648
要使结果更具可读性,至少在开发时,还要将MTRLINES表中的一列也添加到SELECT列表中。 如果只需要PRSN表中至少有 个对应行的行,则可以在WHERE子句中添加谓词:
AND EXISTS(SELECT ['INS.'].Name2, ['INS.1'].Name2 EXCEPT SELECT NULL,NULL)