我有几个结构相同的表 . 我想要的只是从数据库中获取所有表的所有结果 .
例如:
表格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 回答
这应该工作:
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 ...)
您可以使用MERGE Storage Engine创建一个虚拟表,其内容是一组其他表的并集:
然后你可以使用
SELECT Name FROM AllTables
.不,UNION是用于此类事情的条款 .
没有
UNION
你可以用FULL OUTER JOIN
来做...但这是不可取的 .(我'm not totally confident this will work in MySQL, I don'知道它是否支持
JOIN
表达式中的<>
)