2017-05-02 3 views
-4

はシナリオです:私は、次のようなクエリを実行しています:SQLのIN演算子のすべての一致するテキストを取得する方法は?ここでは、明確にする

SELECT * FROM table_name WHERE uid IN (1, 3, 5, 8, 23, 4, 589 ...)

uid Sのリストは、ユーザから来ています。

uidのすべてをSQLを使用してリストに表示する方法はありますか?

私はOracle SQL構文を探していますが、共通データベースシステムの構文も知りたいです。

ありがとうございました。

UPDATE私は一致するすべてのuid秒を取得したいです。たとえば、テーブルにuid 823のレコードがない場合、出力は1、3、5、4、589である必要があります。

+3

あなたが書いたクエリが正確に何をするらしいので、あなたの質問は、不明ですあなたは頼んでいる。サンプル入力と希望する出力を追加してください。 –

+0

私は疑問に思ったのは、 'SELECT * FROM table_name where uid IN(1、3、5、8、23、4、589 ...)' unionのすべての結果と同じです。SELECT * FROM table_name WHERE like ' 1% 'union 'SELECT * FROM table_nameここで、' 3% 'のようになります。 @ JCA_Amellar私は正しいですか? –

+0

簡略化(INリストを短縮)し、サンプルテーブルのデータを追加し、期待される結果を指定します。 – jarlh

答えて

0

私はあなたの質問を正しく理解しています。 値のリストがあれば、テーブルの中に何が入っていて何がないのか知りたければ、これを試すことができます。あなたは一時テーブル(またはそのような選択ユニオン句または何か)で探している値に答える必要がありますし、あなたのテーブル(TXはあなたのテーブルです)で左結合を行います。このスクリプトはあなたにIDEAを与えるためにMSSQLのためのものです。このソリューションがあなたの質問(あなたの質問から明らかになっていないもの)であれば、オラクルに変換するのは簡単です。

CREATE TABLE TX (UID INT) 
INSERT INTO TX VALUES (1),(5),(4) 

CREATE TABLE TEMP1 (ID_VAL INT) 
INSERT INTO TEMP1 SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 5 UNION ALL SELECT 8 UNION ALL SELECT 23 UNION ALL SELECT 4 UNION ALL SELECT 589 

SELECT * FROM TEMP1 

SELECT * 
FROM TEMP1 
LEFT JOIN TX ON TEMP1.ID_VAL = TX.UID 

出力:

ID_VAL  UID 
----------- ----------- 
1   1 
3   NULL 
5   5 
8   NULL 
23   NULL 
4   4 
589   NULL 
+0

DML文は有効なOracle構文ではありません。 – MT0

1

SQLを使用して、リスト内の一致するすべてのUIDを取得する方法はありますか?

はい、あなたのクエリを使用していますが、ちょうどuid列を取得します。カンマ区切りのリストでは、あなたがそれをしたい場合は

SELECT DISTINCT uid 
FROM table_name 
WHERE uid IN (1, 3, 5, 8, 23, 4, 589 ...) 

:あなたが繰り返しをしたくない場合は、DISTINCTキーワードを使用

SELECT LISTAGG(uid, ',') WITHIN GROUP (ORDER BY uid) AS uids 
FROM table_name 
WHERE uid IN (1, 3, 5, 8, 23, 4, 589 ...) 
関連する問題