为什么这个离开连接似乎没有按预期工作?

时间:2012-07-20 15:06:51

标签: sql db2

这出现在工作中,这真的只是一个难题......

查询1:

SELECT * FROM
SYSIBM.SYSTABLES A LEFT JOIN
SYSIBM.SYSTABLESPACE B
ON A.DBNAME = B.DBNAME
AND A.TSNAME = B.NAME
AND A.TSNAME LIKE 'HIB%'
;

此查询不会对HIB%条件进行过滤,这与查询应该执行的操作相反。我想如果将这个标准放在JOIN中会产生相同的结果。

查询2按预期工作:

SELECT * FROM
(SELECT * FROM SYSIBM.SYSTABLES
WHERE TSNAME LIKE 'HIB%') A
LEFT JOIN
SYSIBM.SYSTABLESPACE B
ON A.DBNAME = B.DBNAME
AND A.TSNAME = B.NAME
;

第一个查询有什么问题?

2 个答案:

答案 0 :(得分:4)

TRY

SELECT * FROM SYSIBM.SYSTABLES A 
LEFT JOIN SYSIBM.SYSTABLESPACE B 
  ON A.DBNAME = B.DBNAME AND A.TSNAME = B.NAME 
WHERE A.TSNAME LIKE 'HIB%' ; 

当您将条件放在用于过滤连接记录的左连接中时,但由于是左连接,它将返回表A中的所有记录,因为您没有对其进行任何条件。

现在,如果条件在表B上,它将会有所不同。它属于左连接(除非它类似于B.id为null)或者您将查询返回到内连接。

答案 1 :(得分:2)

您是否尝试将“Like”-part移动到where子句?

SELECT * 
FROM SYSIBM.SYSTABLES A 
LEFT JOIN SYSIBM.SYSTABLESPACE B ON A.DBNAME = B.DBNAME AND A.TSNAME = B.NAME
WHERE A.TSNAME LIKE 'HIB%'
;