mysql - 由唯一字段组成的联合表

时间:2010-03-24 16:20:40

标签: sql mysql

我有两个具有相同结构的表:

id name
1 Merry
2 Mike

and

id name
1 Mike
2 Alis

我需要将第二个表合并为第一个保持唯一名称,因此结果是:

id name
1 Merry
2 Mike
3 Alis

是否可以使用MySQL查询执行此操作,而不使用PHP脚本?

5 个答案:

答案 0 :(得分:8)

这不是连接(设置乘法),这是一个联合(设置加法)。

SELECT  @r := @r + 1 AS id, name
FROM    (
        SELECT  @r := 0
        ) vars,
        (
        SELECT  name
        FROM    table1
        UNION
        SELECT  name
        FROM    table2
        ) q

答案 1 :(得分:2)

这将从table1中选择所有名称,并将那些与table2中不在table1中的所有名称组合在一起。

(
select * 
from table1        
)
union
(        
select * 
from table2 t2 
left join table1 t1 on t2.name = t1.name 
where t1.id is null
)

答案 2 :(得分:1)

使用:

SELECT a.id,
       a.name
  FROM TABLE_A a
UNION
SELECT b.id,
       b.name
  FROM TABLE_B b

UNION将删除重复项。

答案 3 :(得分:0)

如评论所述,这完全取决于你的'id'的含义,因为在这个例子中,它没有任何意义。

SELECT DISTINCT(name) FROM t1 JOIN t2 ON something

如果你只想要名字

SELECT SUM(something), name FROM t1 JOIN t2 ON something GROUP BY name

如果你想通过

做一些小组
SELECT DISTINCT(name) FROM t1 JOIN t2 ON t1.id = t2.id

如果id是相同的

答案 4 :(得分:0)

SELECT DISTINCT COALESCE(t1.name,t2.name) FROM
mytable t1 LEFT JOIN mytable t2 ON (t1.name=t2.name);

将为您提供2个表中唯一名称的列表。如果你想让他们获得新的ID(就像Alis在你想要的结果中所做的那样),那就是其他的东西,需要回答几个问题:

  • 任何名称都需要保持其先前的ID。如果他们这样做,哪个表的id应该是首选?
  • 为什么你有2个具有相同结构的表?即你在生成唯一名单时想要完成什么?