質問

私たちが置いたまったく同じレコードを返すSelectステートメントを実行することが可能かどうかを本当に知りたいです 句?

サンプル:

select * from table
where table_id in (1, 2, 3, 666);

例のこのテーブルには、1〜100のID-Sのみがあるため、この選択は3行のみを返します。 666の1つの(おそらくnullまたはdummy)列を取得するために、私がする必要があることは?

ありがとう!

役に立ちましたか?

解決

ユニオンを使用できます:

select * from table
where table_id in (1, 2, 3);
union
select 666 as table_id, other_fields_with_dummy_values_in_table from dual;

Oracleでそれを行う方法です。 from dual 使用しているデータベースシステムによって異なる場合があります。

ユニオンを使用する場合、ダミークエリは実際のクエリと同じレコードを選択する必要があることに注意してください。

他のヒント

テーブルなしで選択できます

クエリで組合を行うだけです

select table_id, some_column from table
where table_id in (1, 2, 3, 666);
union
select 666, 'dummy_data'

テーブルを仮定します numbers たとえば、1〜1000000のすべての数値を含む(実際、入力値の範囲がカバーされるのに十分です)、次のSQLを実行できます。

SELECT *
  FROM numbers left outer join table on table.table_id = numbers.number
 WHERE numbers.number in (1, 2, 3, 666)

EG SQLのように、より良いソリューションを提供するDBMSを使用する場合 SA_ROWGENERATOR 手順では、テーブルを交換できます numbers 手順を呼び出し、最大数の制限はありません。

IN 節はブールの述語であるため、ダミーレコードセットに置き換える必要があります。

SELECT  m.*
FROM    (
        SELECT  1 AS id
        UNION ALL
        SELECT  2 AS id
        UNION ALL
        SELECT  3 AS id
        UNION ALL
        SELECT  666 AS id
        ) q
LEFT JOIN
        mytable m
ON      m.id = q.id

SQL Server 2008, 、このクエリを実行できます。

SELECT  *
FROM    @mydata d
LEFT JOIN
        mytable t
ON      t.id = d.id

@mydate テーブル変数であり、クライアントからのパラメーターとして渡されます。

PostgreSQL, 、このクエリを実行できます。

SELECT  *
FROM    (
        SELECT  :arr[s] AS id
        FROM    generate_series(1, array_upper(:arr, 1)) s
        ) q
LEFT JOIN
        mytable t
ON      t.id = q.id

どこ :arr 配列です [1, 2, 3, 666], また、クライアントからパラメーターとして渡されました。

Oracle, 、 できるよ:

SELECT  *
FROM    TABLE(:mycol) q
LEFT JOIN
        mytable t
ON      t.id = q.id

, 、 どこ :mycol クライアントから渡されたコレクションタイプの変数です。

考える1つの方法は、データセットとしてクエリを「入力」するデータを「入力」する必要があることです。句がクエリに「追加」されることは決してない場所で見つかったデータは、既存のデータをフィルタリングするためにのみ使用されます。

簡単な例:

DECLARE @MustInclude (Value  int  not null)

INSERT @MustInclude (Value) values (1)
INSERT @MustInclude (Value) values (2)
INSERT @MustInclude (Value) values (3)
INSERT @MustInclude (Value) values (666)

SELECT *
 from @MustInclude mi
  left outer join MyTable mt
   on mt.Value = mi.Value
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top