2013-05-20 35 views
0

說我有一個數據庫DB1以下數據來自所有列的所有數據:選擇在MySQL數據庫中

表1 ID INT(50) 屬性爲varchar(255)

行總數:6550

表2 ID INT(50) 屬性VARCHAR(255) ATTRIBUTE1 VARCHAR(255)

總列數:10550

可能會說更多的表格。我希望獲得所有表中的每一個數據元素。有沒有任何SELECT語句或可以做到這一點?我試過使用

select * from DB1.Table1 UNION ALL select * from DB1.Table2; 

但是,這給了我一個錯誤,指出行數是不同的,因此無法完成。請告訴我是否有任何方法可以這樣做?

問候。

回答

2

您必須明確提供每個表的列。像:

select id, attribute, '' AS attribute1 from DB1.Table1 
UNION ALL 
select id, attribute, attribute1 from DB1.Table2; 
+0

但是,如果我有一個大型數據庫,其列名太多而無法手工列舉呢?我可以從information_schema.tables中選擇列並獲取列嗎? –

+0

不幸的是,如果您對具有不同結構的兩個表使用UNION,則必須指定列名稱。 –

+0

如果指定列名稱有那麼多問題,那麼你也可以在第二個表格中創建虛擬列來創建匹配結構,但這將是一個蹩腳的方法。 –

1

我認爲你可以這樣做: 從db1.table1選擇*,db1.table2

+0

這將返回兩個表的連接,而我希望它們都在同一個表或select語句中,但沒有連接。 –

1

一個工會的工作,但不要使用*,你將需要添加一個「額外「列添加到第一個表上的SELECT(但該列不必實際存在於表中,它只是添加以便選擇匹配)。例如:

SELECT t1.id as 'id', 
     t1.attribute as 'attribute', 
     '' as 'attribute1' 
FROM DB1.Table1 as t1 

UNION ALL 

SELECT t2.id as 'id', 
     t2.attribute as 'attribute', 
     t2.attribute1 as 'attribute1' 
FROM DB1.Table2 as t2 
0

在聯合中,所有select語句的列數必須相同。所以說「select * from table1 union select * from table2」將不起作用,您需要爲任何列數少於最多的列添加虛擬列。

結果會是什麼意思?你會得到一個列,有時候會包含客戶的郵政編碼,有時包括訂單總額,有時還包括員工編號。你會怎麼做?

如果重點只是將數據庫的全部內容轉儲出來供人類查看,爲什麼不直接爲每個表執行單獨的select語句呢?

也許你需要退後一步,看看你正在努力完成什麼,而不是糾纏於如何讓數據庫做一些明確設計的東西,因爲它沒有意義。