首页 文章

MySQL SELECT * FROM table1,table2,table3

提问于
浏览
-2

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

例如:

表格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....

因为这让我的查询这么久,对我来说很痛苦 . 可能我'll have more than 20-30 tables in a database. I'我正在寻找像 SELECT * FROM table1,table2.. etc. 这样的东西

谢谢 .

UPDATE



我这样做(在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

    这应该工作:

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

    EDIT: 对不起,我没有那么喜欢UNIONs .

    创建视图: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 ...)

  • -1

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

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

    然后你可以使用 SELECT Name FROM AllTables .

  • -1

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

  • -2

    没有 UNION 你可以用 FULL OUTER JOIN 来做...但这是不可取的 .

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

    (我'm not totally confident this will work in MySQL, I don'知道它是否支持 JOIN 表达式中的 <>

相关问题