SQL 嵌套查询返回不正确的记录(Toad 13 for Oracle)

SQL nested query returning incorrect records (Toad 13 for Oracle)

此代码在 R Studio 中通过 R 运行,但在将第二部分翻译成 SQL 时,我 运行 遇到了很多问题。

(SELECT L.DATE,
       UPPER(L.USERNAME),
       L.ID,
       L.BUSINESS
FROM LOGS L
WHERE L.APPLICATION = 'A'
AND L.BUSINESS IN ('X','Y','Z')
AND L.DATE BETWEEN TO_DATE('1/1/2019 00:00:01', 'MM/DD/YYYY HH24:MI:SS') AND TO_DATE('2/1/2019    23:59:59','MM/DD/YYYY HH24:MI:SS'));

这returns所需的记录量。当我想添加以下条件时,我得到的记录数量不正确。

AND L.USERNAME IN (SELECT U.USERNAME FROM USERS U WHERE U.TEAM='DATA')

我试过以各种方式添加此条件,但语法要么阻止执行,要么 returns 错误的记录数量。我正在寻求有关如何正确嵌套此查询的帮助。

作为参考,第二条语句在 R 中是这样写的,其中 ADD 是第一条语句(R 数据帧)的赋值:

DATA<-USERS%>%filter(TEAM=='DATA')
DATA[,1]<-toupper(DATA[,1])
ADD[,2]<-toupper(ADD[,2])
DATA_FINAL<-ADD%>%filter(USERNAME %in% DATA$USERNAME)

我一直在没有 Toad 查询生成器的情况下在编辑器中手动编写此代码,因为我觉得它很麻烦。已在 Toad Script Runner 中执行。提前致谢。

该案例很可能是区分大小写的:

SELECT L.DATE,
       UPPER(L.USERNAME),
       L.ID,
       L.BUSINESS
FROM LOGS L
WHERE L.APPLICATION = 'A'
AND L.BUSINESS IN ('X','Y','Z')
AND L.DATE BETWEEN TO_DATE('1/1/2019 00:00:01', 'MM/DD/YYYY HH24:MI:SS') 
               AND TO_DATE('2/1/2019 23:59:59','MM/DD/YYYY HH24:MI:SS'))
AND UPPER(L.USERNAME) IN (SELECT UPPER(U.USERNAME) FROM USERS U WHERE U.TEAM='DATA') 
    -- this expression is non-SARGable(without function index)!

相关文章Case insensitive searching in Oracle