2016-07-27 29 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 

而且我想展示一個新的表只顯示了ElementNames是相同的,則表明它們屬於哪個comp_id到,所以它看起來像這樣:

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

它沒有看起來完全一樣,但問題是我希望能夠加入並顯示ElementNames是相同的,但有不同的comp_id的。 這是我已經有一點點的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

這相當於「選擇a.comp_id,來自...的a.elementName」,沒有連接。它本身就是一個等值線。如果您的值有限,或者您知道邏輯上有一個上限,則可以構造一個查詢來滿足。如果你能告訴我有多少可能的elementName值,我會很高興展示這個解決方案。 –

回答

0

嘗試......

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 – kbball

+0

@kbball謝謝。你是對的。 – Zach

0

你似乎要具有相同比較IDS元素名稱。如果是這樣,你可以使用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; 

這實際上會產生行有兩個列表:

Name,field  1,7 

但它似乎包含你想要的信息。

0

這種查詢可以完成你想要的:

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); 

注意,我通過添加兩個comp_ids的分組。如果我沒有,你不會爲每個重複獲得行。

相關問題