MySQL SELECT * FROM table1,table2,table3

时间:2017-02-06 22:48:31

标签: mysql

我有几个结构相同的表。我想要的只是从数据库中获取所有表的所有结果。

例如:

表1:

id |  Name  
-----------
1  |  John
2  |  Alex
3  |  Patrick
4  |  Donald
5  |  Jane

表2:

id |  Name  
-----------
1  |  Ben
2  |  Dale
3  |  Kane
4  |  Tom
5  |  George

我想要的结果 SELECT Name FROM ... 是:

 Name  
-------
John
Alex
Patrick
Donald
Jane
Ben
Dale
Kane
Tom
George

有没有办法在不使用UNION的情况下轻松完成此操作: SELECT * FROM table1 UNION SELECT * FROM table2 UNION SELECT * FROM table3 ....

因为这使得我的查询时间太长而且对我来说很痛苦。可能我在数据库中有超过20-30个表。我正在寻找像 SELECT * FROM table1,table2 ..等等的东西。

感谢。

更新

<小时/> <小时/>

我这样做(在PHP中),我希望它也有助于其他人:

$dbc1 = $db->query("SELECT group_concat(table_name) AS tables FROM information_schema.tables WHERE table_schema='dbname'");

此查询将所有表名称返回为1个字符串,其逗号分隔如下: table1,table2,table3 ....  然后我爆炸了那个字符串,我在foreach循环中使用。

$dbc1_ftchd = $dbc1->fetch(PDO::FETCH_ASSOC);    
foreach(explode(',',$dbc1_ftchd['tables']) as $next_tb_name){  
        echo $next_tb_name.'<br>';
    }

现在我可以逐个使用所有表,而不是同时使用所有表。但没问题,这对我来说是同样的结果。

感谢所有帮助过我的人:)

4 个答案:

答案 0 :(得分:0)

您可以使用MERGE Storage Engine创建一个虚拟表,其内容是一组其他表的并集:

CREATE TABLE AllTables (
    ... -- column definitions
) ENGINE=MERGE UNION=(Table1, Table2, ...)

然后您可以使用SELECT Name FROM AllTables

答案 1 :(得分:-1)

不,UNION是用于此类事情的条款。

答案 2 :(得分:-1)

如果没有UNION,您可以使用FULL OUTER JOIN进行操作......但这是不可取的。

SELECT
    ISNULL( Table1.Name, Table2.Name ) AS Name
FROM
    Table1
    FULL OUTER JOIN Table2 ON Table1.Name <> Table2.Name

(我不完全相信这会在MySQL中发挥作用,我不知道它是否支持<>表达式中的JOIN

答案 3 :(得分:-2)

这应该有效:

SELECT `Name` FROM `Table1` 
UNION
SELECT `Name` FROM `Table2` 
UNION
SELECT `Name` FROM `Table3` 

编辑:抱歉,我没有看到你问题的最后一段。如果您不喜欢UNION,可以创建一个视图或临时表。

创建视图:https://dev.mysql.com/doc/refman/5.7/en/create-view.html

创建临时表:CREATE TEMPORARY TABLE IF NOT EXISTS tmp_table AS (SELECT * FROM table1 UNION ...)