50

SQLはこれに沿って何かを行うことができますか?SELECT * FROM table WHERE column = everything

4

13 に答える 13

37

何らかの理由(おそらく動的SQL)でクエリの列名が必要な場合は、次のようになります。SELECT * FROM table WHERE column = column

これはに非常に似てWHERE 1=1いますが、私のソリューションで必要な列名が含まれており、他のいくつかの名前も必要になる可能性があります。

于 2018-09-18T15:54:56.277 に答える
30
SELECT * FROM table

SQLを動的に生成している場合は、

SELECT * FROM table WHERE 1=1

1=1プレースホルダーを使用すると、すべてのレコードを返すことができます。サブセットを返す場合や追加の条件ステートメントが必要な場合は、実際の条件に置き換えることができます 。

関連項目
SQL句でWHERE1= 1AND<条件>を使用するのはなぜですか。

于 2012-05-30T22:39:16.600 に答える
21

あなたの質問は3つの解釈を可能にします:

  1. 列は気にしません。where句から削除します(または、これが唯一の副節である場合は、where句をまとめて削除します)。
  2. 列を設定する必要がありますが、何を気にする必要はありません。WHERE column IS NOT nULL
  3. 単純なSQLテンプレートのすべてのレコードを表示できる検索が必要です。SELECT * FROM table WHERE column LIKE '%$searchterm%'
于 2012-05-30T22:41:56.270 に答える
9

すべてか何か?

私が推測するワイルドカードを使用することができます。

SELECT * FROM table WHERE column LIKE "%"
于 2012-05-30T22:37:55.280 に答える
7

クエリでは列名自体を使用できます。

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)

だからあなたは"="文字を保持することができます

于 2020-01-02T07:49:52.307 に答える
5
SELECT * FROM table WHERE column = IF (? = '', column, ?);
于 2019-06-21T21:47:50.817 に答える
2

これは遅いですが、他の人に役立つかもしれません

あなたはこれを試すことができます。

where 
    isnull([column], '') = CASE WHEN @column IS NULL THEN isnull([column], '') ELSE @column END 
于 2015-10-17T16:25:18.200 に答える
1

おそらくIN基準演算子を探していますか?

SELECT * from table where column in (1,2,3,4,5) or column in ('value', 'value2', 'value3');
于 2012-05-30T22:38:11.093 に答える
1

さて、私もこれと同じ問題を抱えていました、そして以下は私の問題を解決しました:

... where column = case when @variable = 'all' then column else @variable end

常にデフォルト値を送信する必要があることに注意してください 。デフォルト値を「all」に設定します。したがって、設定@variable = 'all'すると、mysqlはそれを次のように読み取ります: where column = columnこれはwhere 1=1

于 2019-04-17T16:00:53.607 に答える
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}}のデフォルト値として設定します

于 2020-07-06T21:10:11.363 に答える
0

これが誰かに役立つ場合...指摘するだけで、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);
于 2019-01-29T15:31:10.510 に答える
0

そのフィールドにエルビス演算子を配置します

" . ($variable == 'selected value' ? '' : "AND column='" . $variable . "' ") . "

したがって、htmlページのオプションですべてを選択すると、この^^フィールドは実行されませんが、何かを選択すると、このコードはcolumn='"。$variable"'のように表示されます。

于 2020-07-15T13:10:03.757 に答える
0

使用できます

WHERE 1

1は他の言語のように常に真実です。だからあなたはフィルターを持っていません

于 2021-10-04T12:32:22.580 に答える