2013-10-24 41 views
1

我需要添加到基于我没有以前使用的SQL表A的内容表B柱,并正在寻找咨询如何做到这一点:mysql数据库 - 语句使用?

Table A: 

uid  name account 
1111 Fred A 
1111 Fred A 
1111 Fred A 
1112 Joe  B 
1112 Joe  B 
1112 Joe  B 
1112 Joe  B 
1113 Ralph A 


Table B: 
uid  name  
1111 Fred  
1112 Joe  
1113 Ralph 

我需要以某种方式查询表A并找到与每个唯一名称(或uid)关联的帐户。然后,我需要根据该信息将“帐户”列添加到表B中。我会用什么样的sql语句来做到这一点?

+1

这似乎是一个坏主意,因为它会在两个表的重复数据。重复的数据几乎总是一个糟糕的设计。 –

回答

1
  1. 添加一个新列B.此列将是“空”,即所有行都将有NULL作为该列中的值。

    ALTER TABLE TableB ADD COLUMN account CHAR(1); 
    
  2. 使用多表UPDATE更新该列中的值。它对每个uid多次更新TableB的行,但如果TableA中的给定uid的所有行都具有相同的帐户值,则这应该不成问题。

    UPDATE TableB JOIN TableA USING (uid) 
    SET TableB.account = TableA.account; 
    
  3. 我建议删除表A中的冗余列。将信息存储在两个地方不可避免地会导致差异。

    ALTER TABLE TableA DROP COLUMN account; 
    
+0

这似乎是我正在寻找,谢谢。该帐户列实际上将包含varchar的现实生活 - 现在我试图找出如何确定varchar的最大大小。很显然,我希望它与表A的varchar相同。有没有获取这些信息的好方法? – SheerSt

+0

'SELECT MAX(LENGTH(account))FROM TableA' –

0
SELECT DISTINCT A.uid,A.account AS Account_Name 
    FROM TableA A,TableB B 
    WHERE A.uid = B.uid; 
0
select name, distinct(account) from A group by name 
+0

这是一个语法错误。您不能像使用DISTINCT那样使用DISTINCT。 –