私が持っているとしましょう
SELECT A,B FROM T1 WHERE A=X and B=Y;
私がphpと一緒に設定した方法では、Aおよび/またはBで検索する選択肢を与えているので、XとYが空である可能性があることを知っています.Aだけが与えられたとしましょう。 A=X のすべてのタプルを返す必要がありますか? SQL用の「空白」関数はありますか?
2つの検索パラメーターXおよび/またはYが与えられた場合、withを使用OR
しIS NULL
ていずれかのパラメーターで検索できます。
SELECT A,B
FROM T1
WHERE (X IS NULL OR A=X) AND
(Y IS NULL OR B=Y)
AまたはBのデータがNULL値にならないことがわかっている場合は、この種のものを使用できます。また、これらの列のどちらも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を介してクエリを配信する場合の別の方法は、Aが存在する場合にBのAND / OR句を含めないことです。つまり、次のようになります。
$ querystr = "SELECT A、B FROM table WHERE"。($ a!= ""? "A = $ a": "")。($ b!= ""? "B = $ b")
以下は、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は、不明な値または適用できない値のプレースホルダーとして使用されます。
詳細:MySQLNULL値
つまり、
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);