2016-07-27 19 views
0

私はこのようになりますFieldListと呼ばれるテーブルがあります。同じテーブルから複数の列を結合するには?

ElementName|Description|comp_id|FieldName 
----------------------------------------- 
Name  | red  | 1  | names 
Name  | blue  | 7  | names 
field  | red  | 1  | names 
boxes  | blue  | 5  | blues 
field  | orange | 7  | reds 

をそして私は同じ、その後、彼らはそれがこのように見えるために属するcomp_id示しているElementNamesを示し、新たなテーブルを表示したいです:

ElementName| comp_id| comp_id 
----------------------------- 
Name  | 1  | 7 
field  | 1  | 7 

それは、まさにこのように見ているdoesntのが、ポイントは、私が参加して、同じであるが、異なるcomp_id年代を持つElementNamesを表示できるようにしたいです。 これは私が既に持っているが、明らかに動作しないSQLコードの少しです。

SELECT a.comp_id, a.ElementName, b.ElementName 
FROM FieldList a 
INNER JOIN FieldList b ON a.ElementName = b.ElementName; 
+1

類似した要素名はいくつありますか?最大数がわからない場合、これを解決するには動的SQLが必要です。 –

+0

これはなぜ機能しないのですか?どうしたの? –

+1

これは、 "select a.comp_id、a.elementName from ..."と同じです。それはそれ自体の上のequijoinです。有限個の値がある場合、または論理的に上限があることがわかっている場合は、満たすためにクエリを作成できます。 elementNameの可能な値の数を知ることができれば、このソリューションを表示することができれば幸いです。 –

答えて

0

あなたは同じコンプIDを持っている要素名をしたいように見える...

SELECT a.ElementName, a.comp_id, b.comp_id 
From FieldList a 
left join FieldList b on 
    a.ElementName = b.ElementName and 
    a.comp_id <> b.comp_id 
WHERE a.comp_id is not null 
+0

私はあなたが意味すると思う:SELECT a.ElementName、a.comp_id、b.comp_id ...あなたがa.ElementName = b.ElementNameの条件としてそれを持っているときに、Element Nameを繰り返すことはしません。 – kbball

+0

@kbballありがとう。あなたは正しいです。 – Zach

0

これを試してみてください。もしそうなら、あなたはこのようなgroup_concat()使用することができます。

select group_concat(elementname), comps 
from (select fl.elementname, group_concat(fl.comp_id order by fl.comp_id) as comps 
     from fieldlist fl 
     group by fl.elementname 
    ) en 
group by comps; 

をこれは、実際には2つのリストで列を生成します。

Name,field  1,7 

しかし、あなたが欲しい情報が含まれているようです。

0

このクエリでは、あなたが望むものを達成することができる:私は2 comp_idsの添加によってグループ化しています

SELECT a.ElementName, a.comp_id, b.comp_id 
    FROM FieldList a 
    JOIN FieldList b ON a.ElementName = b.ElementName 
    WHERE a.comp_id != b.comp_id 
    GROUP BY a.ElementName, (a.comp_id + b.comp_id); 

注意を。私がしなければ、各複製の行を取得しません。

関連する問題