gpt4 book ai didi

SQL 使用 'IN' 实现 'OR' 运算符

转载 作者:行者123 更新时间:2023-12-04 04:33:41 24 4
gpt4 key购买 nike

我正在开发一个遗留系统,该系统具有用于生成 SQL 查询的自定义 Java 实现。那不支持“IN”操作。
为了实现“IN”,我写了类似的东西

SELECT * from Q
WHERE IS_HIDDEN = 0 AND ID = 1
OR ID = 2 OR ID = 3 AND IS_DELETED = 0;

我知道像下面这样的就可以了。
SELECT * from Q
WHERE IS_HIDDEN = 0 AND (ID = 1
OR ID = 2 OR ID = 3) AND IS_DELETED = 0 ;

这两者都返回相同的结果,但我对 SQL 运算符的优先级不太有信心。我读过 AND 优先
假设两个 SQL 语句是等效的是否安全。

我想写的实际查询是
SELECT * from Q
WHERE IS_HIDDEN = 0 AND ID IN(1, 2, 3) AND IS_DELETED = 0;

有问题的数据库是 oracle 10g。

更新:这是有效的原因是因为 oracle CBO 重新排列了 where 子句中的子句。

最佳答案

不,您的查询不一样

SELECT * from Q
WHERE IS_HIDDEN = 0 AND ID = 1
OR ID = 2 OR ID = 3 AND IS_DELETED = 0;

就像
SELECT * FROM Q WHERE IS_HIDDEN = 0 AND ID = 1
UNION
SELECT * FROM Q WHERE ID = 2
UNION
SELECT * FROM Q WHERE ID = 3 AND IS_DELETED = 0

当你为你的 OR 使用括号时,你就和 IN-Clause 一样

你可以试试: SQLFiddle

关于SQL 使用 'IN' 实现 'OR' 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20118811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com