0

SELECT ステートメントに複数の行を返すサブクエリがありますが、両方の値が必要です。複数の値をカンマで連結して、外部クエリにサブクエリが1つの値のみを返すと思わせる方法はありますか?

私のクエリの例:

select o.id,
   (select v.value v from values v join attributes a on v.att_id=a.att_id where a.att_id='100' and v.id=o.id)
from objects o
where o.class_id='GGzX';

前もって感謝します!

4

3 に答える 3

3

このクエリを試してみてください。役に立つかもしれません (ここをクリックてクエリをテストしてください):

CREATE TABLE TEST1(
ID INT);

CREATE TABLE TEST2(
    ID INT,
    TXT VARCHAR2(100));

INSERT INTO TEST1 VALUES(1);
INSERT INTO TEST1 VALUES(2);
INSERT INTO TEST1 VALUES(3);

INSERT INTO TEST2 VALUES(1,'A');
INSERT INTO TEST2 VALUES(1,'B');
INSERT INTO TEST2 VALUES(2,'C');
INSERT INTO TEST2 VALUES(3,'A');
INSERT INTO TEST2 VALUES(3,'B');
INSERT INTO TEST2 VALUES(3,'C');

/* HERE IS THE QUERY!!!*/
SELECT A.ID, 
(SELECT listagg(B.TXT,',' ) WITHIN GROUP (ORDER BY B.ID)
FROM TEST2 B WHERE B.ID = A.ID
) AS CONTATENATED_FIELD
FROM TEST1 A;

注: listagg は 11.X バージョンで動作します。詳細については、このリンクを参照してください。

クエリによると、次のようなものが必要になる場合があります。

select o.id,
(SELECT listagg(v.value,',' ) WITHIN GROUP (ORDER BY v.value) from values v join attributes a on v.att_id=a.att_id where a.att_id='100' and v.id=o.id)
from objects o
where o.class_id='GGzX';
于 2013-07-10T21:11:28.717 に答える
0

クエリを追加GROUP BY a.att_idまたは制限するだけです

select o.id,
   (select v.value val from values v join attributes a on v.att_id=a.att_id
 where a.att_id='100' and v.id=o.id GROUP BY a.att_id)
from objects o
where o.class_id='GGzX';

OR


select o.id,
   (select v.value val from values v join attributes a on v.att_id=a.att_id
 where a.att_id='100' and v.id=o.id LIMIT 1)
from objects o
where o.class_id='GGzX';

または、任意の区切り記号で値をグループ化するだけです

select o.id,
   (select group_concat( v.value SEPARATOR ' / ') val from values v join attributes a on v.att_id=a.att_id
 where a.att_id='100' and v.id=o.id GROUP BY a.att_id)
from objects o
where o.class_id='GGzX';
于 2013-07-10T21:07:34.430 に答える