0

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

查询一:

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
;

第一个查询有什么问题?

4

2 回答 2

4

尝试

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 为空),否则您会将查询转回内部连接。

于 2012-07-20T15:15:34.550 回答
2

您是否尝试将“Like”部分移至 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%'
;
于 2012-07-20T15:14:34.597 回答