質問
私たちが置いたまったく同じレコードを返す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