SQLはこれに沿って何かを行うことができますか?SELECT * FROM table WHERE column = everything
13 に答える
何らかの理由(おそらく動的SQL)でクエリの列名が必要な場合は、次のようになります。SELECT * FROM table WHERE column = column
これはに非常に似てWHERE 1=1
いますが、私のソリューションで必要な列名が含まれており、他のいくつかの名前も必要になる可能性があります。
SELECT * FROM table
SQLを動的に生成している場合は、
SELECT * FROM table WHERE 1=1
1=1
プレースホルダーを使用すると、すべてのレコードを返すことができます。サブセットを返す場合や追加の条件ステートメントが必要な場合は、実際の条件に置き換えることができます 。
あなたの質問は3つの解釈を可能にします:
- 列は気にしません。where句から削除します(または、これが唯一の副節である場合は、where句をまとめて削除します)。
- 列を設定する必要がありますが、何を気にする必要はありません。
WHERE column IS NOT nULL
- 単純なSQLテンプレートのすべてのレコードを表示できる検索が必要です。
SELECT * FROM table WHERE column LIKE '%$searchterm%'
すべてか何か?
私が推測するワイルドカードを使用することができます。
SELECT * FROM table WHERE column LIKE "%"
クエリでは列名自体を使用できます。
SELECT * FROM TABLE WHERE COLUMN = COLUMN
例えば:
SELECT * FROM Student WHERE YEAR = YEAR
または補助パラメータを使用して:
SELECT * FROM Student WHERE YEAR = (CASE WHEN @year IS NOT NULL THEN @year ELSE YEAR END)
だからあなたは"="文字を保持することができます
SELECT * FROM table WHERE column = IF (? = '', column, ?);
これは遅いですが、他の人に役立つかもしれません
あなたはこれを試すことができます。
where
isnull([column], '') = CASE WHEN @column IS NULL THEN isnull([column], '') ELSE @column END
おそらくIN基準演算子を探していますか?
SELECT * from table where column in (1,2,3,4,5) or column in ('value', 'value2', 'value3');
さて、私もこれと同じ問題を抱えていました、そして以下は私の問題を解決しました:
... where column = case when @variable = 'all' then column else @variable end
常にデフォルト値を送信する必要があることに注意してください 。デフォルト値を「all」に設定します。したがって、設定
@variable = 'all'
すると、mysqlはそれを次のように読み取ります:where column = column
これはwhere 1=1
動的に作成するクエリを開発しているときに、この問題に直面しました。簡単に言うと、これが私の解決策です。
WHERE (column = ANY (SELECT distinct column) OR column IS NULL)
これはNULL値で機能し、実際には空のWHEREステートメントと同じです。AND演算子を使用してWHEREオプションを追加できるようにするために、角かっこを使用します。
これは、次のことを意味します。
select count("objectId"), "source"
from "SomeTable"
where "createdAt" > '2020-07-06'
and ("source" = any (select distinct "source") or "source" is null)
and ("country" = any (select distinct "country") or "country" is null)
and "channel" is not null
group by "source"
これに等しい:
select count("objectId"), "source"
from "SomeTable"
where "createdAt" > '2020-07-06'
and "channel" is not null
group by "source"
だから私はクエリテンプレートを作ることができます:
...
WHERE (column = {{filter_value}} )
...
ANY (SELECT distinct column) OR column IS NULL)
{{filter_value}}のデフォルト値として設定します
これが誰かに役立つ場合...指摘するだけで、SELECT * FROMのような問題がある場合は、フィルタリングなどのWHERE(特定またはすべて)のような問題がある場合
SELECT * FROM something as s WHERE (?1 = 0 OR ?1 = s.type = ?1)
は、ここで0を使用できます。自由に変更できます。フィルタリングに休止状態のJPAリポジトリを使用しているときにこれが必要でした。プリペアドステートメントの安全性のため、前の回答で示唆されているように、これを医学的に行うことはできません。?1は次に対応します:
Page<Something> filterSometing(Long type,Pageable pageable);
そのフィールドにエルビス演算子を配置します
" . ($variable == 'selected value' ? '' : "AND column='" . $variable . "' ") . "
したがって、htmlページのオプションですべてを選択すると、この^^フィールドは実行されませんが、何かを選択すると、このコードはcolumn='"。$variable"'のように表示されます。
使用できます
WHERE 1
1は他の言語のように常に真実です。だからあなたはフィルターを持っていません