【发布时间】:2008-10-31 08:18:57
【问题描述】:
我有两个表 TAB_A 和 TAB_B。 TAB_A 是主表,TAB_B 是子/事务表。 TAB_A 具有 COL_A(主键),TAB_B 具有 COL_B(主键)和 COL_A。
由于某些业务原因,未在 COL_A 列的 TAB_A 和 TAB_B 之间定义外键。
TAB_B 中有 4 条记录,COL_A 中的值分别为 1、2、3 和 4,但在 TAB_A 的 COL_A 中没有对应的匹配值。 (它们是孤儿记录,错误创建的)
当我发出以下 SELECT 查询时,我得到四条记录
SELECT B.COL_B,
B.COL_A
FROM TAB_A A,
TAB_B B
WHERE A.COL_A = B.COL_A
AND B.COL_A IN (1, 2, 3, 4)
但如果我在 SELECT 查询中开始引用 A.COL_A,则不会返回任何记录。
SELECT B.COL_B,
B.COL_A,
A.COL_A
FROM TAB_A A,
TAB_B B
WHERE A.COL_A = B.COL_A
AND B.COL_A IN (1, 2, 3, 4)
有人能解释一下这种奇怪的行为吗?
AIX 中的 DB2 版本 9.5
【问题讨论】:
-
请确认第一个查询与描述的完全一样,并且它实际上返回了 4 条记录。如果 COL_A 的值 1、2、3、4 在 TAB_B 中不存在,则它不应返回任何内容。
-
很明显,第二个查询中有错字,也许你说的是 A.COL_A = B.COL_C 或其他一些错字