请问这是ORACLE的Bug吗

詩和遠方 詩和遠方 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
先准备数据:
CREATE TABLE Table_A(EID NUMBER PRIMARY KEY);
/
CREATE TABLE Table_B(EID NUMBER PRIMARY KEY,EMail VARCHAR2(300));
/

INSERT INTO Table_A(EID)
SELECT 1 FROM Dual UNION ALL
SELECT 2 FROM Dual UNION ALL
SELECT 3 FROM Dual UNION ALL
SELECT 4 FROM Dual;
/
INSERT INTO Table_B(EID,Email)
SELECT 3,'123@qq.com' FROM Dual UNION ALL
SELECT 4,'234@qq.com' FROM Dual;
/
COMMIT;

再看查询:
--有返回记录
SELECT a.EID
FROM Table_A a
LEFT JOIN Table_B b ON a.EID = b.EID;

-- 无返回记录???
SELECT a.EID
FROM Table_A a
LEFT JOIN (SELECT EID,EMail FROM Table_B WHERE EID IN (3,4)) b ON a.EID = b.EID;

-- 加一列,又返回记录了!!!
SELECT a.EID,b.Email
FROM Table_A a
LEFT JOIN (SELECT EID,EMail FROM Table_B WHERE EID IN (3,4)) b ON a.EID = b.EID;

-- 用COUNT(*)包一层,结果居然是0
SELECT COUNT(*)
FROM (SELECT a.EID,b.Email
FROM Table_A a
LEFT JOIN (SELECT EID,EMail FROM Table_B WHERE EID IN (3,4)) b ON a.EID = b.EID);


奇怪的是,上面建表时,如果不加主键,则上面第2个查询是有记录的,最后一个也不是返回0.

附ORACLE版本:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
...全文
评论 3
收藏 已收藏
分享
返回顶部
詩和遠方
Oracle 高级技术 3,499 成员 18,710 内容