2011-03-29 89 views
4

我有兩張表。它們內部的值並不相同,但大部分的結果是相同的,其中一個表中有一些額外的字段。 簡化的形式我有這樣的事情:mysql:比較兩張表的結構

|table_1| |table_2| 
id   id 
name   name 
telephone telephone 
email  email 
      address 
      language 

我想複製TABLE_2 structore到TABLE_1和設置地址和語言爲NULL。爲此,我需要明確地將它們設置爲null,這不是很好,因爲我的真正表格是一團糟(超過30列)。我只有4-5個新的字段,有沒有辦法比較兩個表之間的結構並查看其差異?那我自己就可以自己添加新的字段。

回答

10

以下(未測試)SQL應該爲您提供兩個表中列的列表。
如果列中存在該列,in_table_1和in_table_2列將包含「是」。

select column_name 
     ,max(case when table_name = 'table_1' then 'Yes' end) as in_table_1 
     ,max(case when table_name = 'table_2' then 'Yes' end) as in_table_2 
    from information_schema.columns 
where table_name in('table_1', 'table_2') 
    and table_schema = 'your_database' 
group 
    by column_name 
order 
    by column_name; 

您可以添加having count(*) = 1以僅返回不在兩個表中的列。

您可能還想要添加數據類型。看看INFORMATION_SCHEMA

+0

謝謝,這個很有用查詢:) – WraithLux 2011-04-04 10:35:29