假设我有
SELECT A,B FROM T1 WHERE A=X and B=Y;
我与 php 一起设置的方式,我知道 X 和 Y 可能为空,因为我可以选择使用 A 和/或 B 进行搜索。所以假设只给出了 A,Y 会是什么必须返回所有 A=X 的元组?SQL 是否有某种“空白”函数?
给定两个搜索参数 X 和/或 Y,您可以使用OR
withIS NULL
通过任一参数进行搜索:
SELECT A,B
FROM T1
WHERE (X IS NULL OR A=X) AND
(Y IS NULL OR B=Y)
如果您知道 A 或 B 中的数据永远不会是 NULL 值,或者您可以在 if 函数中修改 NULL 值,如果您知道这些列中的任何一个都不会是值,您可以使用某种类型的东西
MySQL:
SELECT A,B FROM table where A=IF('X' <> '', X, NULL) OR B=IF('Y' <> '', Y, NULL)
SQL 服务器:
SELECT A,B FROM table where A=IIF('x' <> '', X, NULL) OR B=IIF('Y' <> '', Y, NULL)
如果您通过 PHP 传递查询,您的另一种选择是不包括 B 的 AND/OR 子句(如果 A 存在),即:
$querystr = "SELECT A,B FROM table WHERE ".($a != "" ? "A = $a" : "").($b != "" ? "B = $b")
以下将返回 or A 或 B 为 NULL (从未填充)或 A 和 B 都等于您定义的值的所有行:
SELECT A, B FROM T1 WHERE (A IS NULL or A=X) and (B IS NULL or B=Y);
如果您正在寻找其他内容,请澄清您的问题。
我想你会寻找检查是否A IS NULL
.
所以整个 SQL 查询看起来像:
SELECT A, B FROM T1 WHERE (A=X OR A IS NULL) AND (B=Y OR B IS NULL);
如果A
表中的列是可选的,您可以插入新记录或更新现有记录,而无需向该列添加值。这意味着该字段将使用 NULL 值保存。NULL 用作未知或不适用值的占位符。
更多信息:MySQL NULL 值
你的意思是,
SELECT A,B
FROM T1
WHERE (A=X or X is null)
and (B=Y or Y is null)
and not(A is null and B is null);