属性值的空白值

时间:2013-03-23 01:35:40

标签: php mysql sql

假设我有

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

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

5 个答案:

答案 0 :(得分:1)

根据两个搜索参数X和/或Y,您可以使用ORIS NULL来搜索任一参数:

SELECT A,B 
FROM T1 
WHERE (X IS NULL OR A=X) AND
    (Y IS NULL OR B=Y)

答案 1 :(得分:1)

如果您知道A或B中的数据永远不会是NULL值,或者您可以修改if函数中的NULL值,如果您知道这些列中的任何一列都不会< / p>

MySQL的:

    SELECT A,B FROM table where A=IF('X' <> '', X, NULL) OR B=IF('Y' <> '', Y, NULL)

SQL Server:

    SELECT A,B FROM table where A=IIF('x' <> '', X, NULL) OR B=IIF('Y' <> '', Y, NULL)

如果您通过PHP提交查询,则另一种选择是,如果A存在,则不包括B的AND / OR子句,即:

$ querystr =“SELECT A,B FROM table WHERE”。($ a!=“”?“A = $ a”:“”)。($ b!=“”?“B = $ b”)

答案 2 :(得分:1)

以下将返回其中一个或A或B为NULL(从未填写)或A和B都等于您定义的行的所有行:

SELECT A, B FROM T1 WHERE (A IS NULL or A=X) and (B IS NULL or B=Y);

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

答案 3 :(得分: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 values

答案 4 :(得分: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);