2013-10-24 46 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。 –