如何从同一个表中连接多个列?

时间:2016-07-27 17:08:45

标签: mysql sql join

我有一个名为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的{​​{1}}。 这是我已经有的一点sql代码,但它显然不起作用。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您似乎想要具有相同compid的元素名称。如果是这样,您可以像这样使用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

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

答案 2 :(得分: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进行分组。如果我没有,你就不会为每个重复获得行。