2016-06-22 10 views
0

string_aggの結果をIN文で使用できるように "マッサージ"する必要があることは誰でも知っていますか? 以下にいくつかのサンプルコードを示します。御時間ありがとうございます。 P.S:あなたの頭を掻き、何が欲しいのかを尋ねる前に。私はstring_agg b/cの問題を表示するためにこのコードを使用しているに過ぎません。Postgresqlでstring_aggを使用するとIN文になります

ヘンリー

WITH TEMP AS 
(
SELECT 'John' AS col1 
UNION ALL 
SELECT 'Peter' AS col1 
UNION ALL 
SELECT 'Henry' AS col1 
UNION ALL 
SELECT 'Mo' AS col1 
) 
-- results that are being used in the IN statement 
--SELECT string_agg('''' || col1::TEXT || '''',',') AS col1 FROM TEMP 


SELECT col1 FROM TEMP 
WHERE col1 IN 
(
SELECT string_agg('''' || col1::TEXT || '''',',') AS col1 
FROM TEMP 
) 
+1

なぜあなたは 'string_agg()'が必要だと思いますか? '... col1(tempからcol1を選択してください)'を使用してください。 –

答えて

0

あなたは、静的コードで動的なコードを混在させることはできません。あなたの例は、あなたがしたいことが何であるかについては、それほど明確ではありません。

WITH TEMP(col1) AS (values ('John'), ('Peter'), ('Henry'), ('Mo')) 
SELECT col1 FROM TEMP 
WHERE col1 = ANY (SELECT ARRAY(SELECT col1 FROM TEMP)) 

または単に(からここでは主ので副選択任意のフィルタなしで同じテーブルである):

WITH TEMP(col1) AS (values ('John'), ('Peter'), ('Henry'), ('Mo')) 
SELECT col1 FROM TEMP 
WHERE col1 IN (SELECT col1 FROM TEMP) 

又はアレイを使用して:あなたのサンプルは以下のように書くことができる

WITH TEMP(col1) AS (values ('John'), ('Peter'), ('Henry'), ('Mo')) 
SELECT col1 FROM TEMP 
+0

ありがとうございます。この例の目的は、string_aggの結果を具体的に使用し、その結果をINステートメントで使用する方法です。しかし、それはあなたの助けから可能ではないようです。そして、私の次の最良の選択肢は、ARRAYを使うことです。しかし、私はエンドクエリの結果が実際にINステートメントとしてvb6プログラムに渡されるように制限されています。そのうち修正する機会のないブラックボックスと考えることができます。 –

+0

@HenryMaher方法はありますが、非常に信頼性が低く、パフォーマンスが悪いので、最後の手段として最適です。 '、'、 '、'、 '、'、 '、'、 '、') '、'、 '、') '、'、 '、'、 ' '' || col1 || '' '、')> 0' –

関連する問題