假设我有
SELECT A,B FROM T1 WHERE A=X and B=Y;
我和php一起设置它的方式,我知道X和Y可能是空的,因为我选择用A和/或B进行搜索。所以假设只给出A, Y必须返回A = X的所有元组? SQL有某种“空白”功能吗?
答案 0 :(得分:1)
根据两个搜索参数X和/或Y,您可以使用OR
和IS 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);