0

假设我有

 SELECT A,B FROM T1 WHERE A=X and B=Y;

我与 php 一起设置的方式,我知道 X 和 Y 可能为空,因为我可以选择使用 A 和/或 B 进行搜索。所以假设只给出了 A,Y 会是什么必须返回所有 A=X 的元组?SQL 是否有某种“空白”函数?

4

5 回答 5

1

给定两个搜索参数 X 和/或 Y,您可以使用ORwithIS NULL通过任一参数进行搜索:

SELECT A,B 
FROM T1 
WHERE (X IS NULL OR A=X) AND
    (Y IS NULL OR B=Y)
于 2013-03-23T01:45:08.090 回答
1

如果您知道 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")

于 2013-03-23T01:45:35.830 回答
1

以下将返回 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);

如果您正在寻找其他内容,请澄清您的问题。

于 2013-03-23T01:46:49.920 回答
1

我想你会寻找检查是否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 值

于 2013-03-23T01:48:51.430 回答
1

你的意思是,

 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);
于 2013-03-23T01:50:43.507 回答