让我们检查这两个语句:
IF (CONDITION 1) OR (CONDITION 2)
...
IF (CONDITION 3) AND (CONDITION 4)
...
Run Code Online (Sandbox Code Playgroud)
如果CONDITION 1是TRUE,会CONDITION 2被检查吗?
如果CONDITION 3是FALSE,会CONDITION 4被检查吗?
条件如何WHERE:SQL Server 引擎是否优化WHERE子句中的所有条件?程序员是否应该以正确的顺序放置条件以确保 SQL Server 优化器以正确的方式解析它?
添加:
感谢 Jack 提供链接,来自 t-sql 代码的惊喜:
IF 1/0 = 1 OR 1 = 1
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
IF 1/0 = 1 AND 1 = 0
SELECT 'True' …Run Code Online (Sandbox Code Playgroud) 在WHERESQL 查询的子句中,我希望这两个条件具有相同的行为:
NOT (a=1 AND b=1)
Run Code Online (Sandbox Code Playgroud)
对比
a<>1 AND b<>1
Run Code Online (Sandbox Code Playgroud)
第一个条件的行为符合预期,虽然我希望第二个条件做同样的事情,但事实并非如此。
这是非常基本的东西,但可耻的是我看不出我做错了什么。
我需要导出表的数据和结构,但数据必须具有特定条件(WHERE status=0 and id>20)。
如何根据来自 phpMyAdmin 或任何东西的 where 条件导出 mysql 数据库。
我有一张桌子
ID myField
------------
1 someValue
2 NULL
3 someOtherValue
Run Code Online (Sandbox Code Playgroud)
和一个 T-SQL 布尔表达式,它可以计算为 TRUE、FALSE 或(由于 SQL 的三元逻辑)UNKNOWN:
SELECT * FROM myTable WHERE myField = 'someValue'
-- yields record 1
Run Code Online (Sandbox Code Playgroud)
如果我想获得所有其他记录,我不能简单地否定表达式
SELECT * FROM myTable WHERE NOT (myField = 'someValue')
-- yields only record 3
Run Code Online (Sandbox Code Playgroud)
我知道为什么会发生这种情况(三元逻辑),并且我知道如何解决这个特定问题。
我知道我可以使用myField = 'someValue' AND NOT myField IS NULL并且我得到一个永远不会产生 UNKNOWN 的“可逆”表达式:
SELECT * FROM myTable WHERE NOT (myField = 'someValue' AND myField IS NOT NULL)
-- yields records 2 …Run Code Online (Sandbox Code Playgroud) 我需要有条件地引发错误,但我只能使用简单的语句,而不能使用存储过程。
我想做这样的事情:
select case when foo = "bar" then 1 else SIGNAL SQLSTATE 'ERROR' end;
Run Code Online (Sandbox Code Playgroud)
不幸的是,SIGNAL 仅可用于触发器和过程,我必须在现有应用程序中使用它,该应用程序只允许我输入语句,但不允许我输入过程。(我只有一条长线,无法设置分隔符等)
有没有其他方法可以有条件地导致运行时错误?
我有一个parcels当前包含列owner_addr1, owner_addr2,的表owner_addr3。有时,后两个字段中的一个或两个字段为空。我想将它们组合成一个新的字段,owner_addr上面的每个字段//都在它们之间连接。
但是如果一个或多个原始列是 NULL,我不想连接//到结果列。因此,举例来说,如果owner_addr1是123 4th Avenue SE和owner_addr2和owner_addr3的NULL,然后我想要的结果列只是123 4th Avenue SE,没有123 4th Avenue SE // //(如果我只是做了这会发生CONCAT()与//空字符串之间......我只是想添加//非之间的NULL列,或将其如果只有一个非NULL列,则完全退出。
有没有一种简单的方法可以在 Postgresql 中进行这种条件连接,它会遗漏空行?或者我应该写一个python脚本来做到这一点?
我想查找发生在特定日期的所有记录。
SELECT *
FROM table1
WHERE date(column) in ($date1, $date2, ...);
Run Code Online (Sandbox Code Playgroud)
但是,正如你们中的许多人一样,知道这种比较不适用于索引。所以,我想知道是否有一种简单的方法可以将此查询转换为以下查询的样式而无需太多努力(即:不使用外部工具)。
SELECT *
FROM table1
WHERE (column >= $date1 AND column < $date1 + interval 1 day)
OR (column >= $date2 AND column < $date2 + interval 1 day)
...
Run Code Online (Sandbox Code Playgroud)
所以优化器仍然可以使用索引。(我正在使用 MySQL,但 ANSI SQL 会很棒)
是否可以根据另一列的值更改 postgres 中列的约束?例如(伪代码):
CREATE TABLE transactions(
id SERIAL PRIMARY KEY,
type TXN_TYPE NOT NULL,
amount BIGINT,
. . . .,
refunded boolean DEFAULT FALSE,
refund_id DEFAULT NULL if (CONSTRAINT link_refund CHECK (refunded=TRUE))=TRUE REFERENCES transactions(id)
);
Run Code Online (Sandbox Code Playgroud) 想象一下在 Redis 数据库中有一堆散列,每个散列代表一个用户对象。例如,您将如何让用户获得最低注册日期?位置ts_registered最低的用户。我在 redis.io的命令页面上搜索了一些,但似乎没有在那里找到它的命令。
我对Redis没有太多经验,我基本上只是在检查它是如何工作的。
为什么这如此棘手,令牌设置为什么,它不等于 null 也不等于空字符串?
SELECT lexemes
FROM ts_debug('This is a title')
WHERE alias = 'asciiword';
lexemes
---------
{}
{}
{}
{titl}
(4 rows)
Run Code Online (Sandbox Code Playgroud)
好吧..所以我想摆脱{},
SELECT lexemes
FROM ts_debug('This is a title')
WHERE alias = 'asciiword'
AND lexemes <> '{}'
AND lexemes <> ARRAY[]::text[]
AND lexemes IS NOT NULL
AND lexemes <> ARRAY[' ']
AND lexemes <> ARRAY[null]::text[];
Run Code Online (Sandbox Code Playgroud)
我知道其中大多数都行不通。,但我完全困惑为什么<> '{}'不起作用<> ARRAY[]::text;。我该如何过滤掉这个?
condition ×10
mysql ×3
postgresql ×3
null ×2
sql-server ×2
array ×1
concat ×1
constraint ×1
date ×1
errors ×1
export ×1
optimization ×1
performance ×1
phpmyadmin ×1
raiserror ×1
redis ×1
select ×1
string ×1
t-sql ×1