从所有表中选择

时间:2010-08-26 03:43:40

标签: mysql

我的数据库中有很多表都具有相同的结构。我想从所有表中进行选择,而不必像以下那样列出所有表:

SELECT name FROM table1,table2,table3,table4

我试过但这不起作用:

SELECT name FROM *

有没有办法选择数据库中的所有表而不在查询中列出每个表?

6 个答案:

答案 0 :(得分:5)

  

我正在使用在线文件浏览器,每个目录都有自己的表

由于一个原因,这是非常无用的:当你有大约200个文件(这种情况是真的,是吗?)你有大约200个表。如果每个目录中有大约一千个文件..等等。在某些时候,您要么从数据库中选择要么购买更多服务器资源,要么处理速度慢。

我认为你应该改变你的数据库结构:只需从你的表中添加parent_folder_id列开始,然后你就可以把你所有的行(文件和目录 - 因为目录也是一个文件 - 在这里你可以在一个表中添加type列来确定这一点。

答案 1 :(得分:1)

据我所知,没有这样的通配符可供选择*所有表格。我建议写一个view,然后再调用view(这样可以节省你每次写出的名字) - VoodooChild

答案 2 :(得分:1)

我找到了解决方案,但我仍然想知道是否有更简单的方法或更好的解决方案。

但这就是我想出的:

$tables = mysql_query("show tables");
$string = '';
while ($table_data = mysql_fetch_row($tables)){
    $string.=$table_data[0].',';
}   
$ALL_TABLES = substr($string,0,strlen($string)-1);
$sql="SELECT name FROM $ALL_TABLES ";

答案 3 :(得分:1)

这意味着你不应该有很多具有相同结构的表。
但只是一个带有字段的表来区分不同类型的数据,无论它是什么。

然后选择所有都没问题。

答案 4 :(得分:0)

听起来你想把每张桌子放在一起UNION,所以你得到的结果好像它们是一张大桌子。您需要完整地写出查询

SELECT * FROM table1 UNION SELECT * FROM table2 UNION ... SELECT * FROM tableN

复制&粘贴可能是你的朋友。

我很好奇为什么你有很多不同的表具有相同的结构?

答案 5 :(得分:0)

您可以像这样的代码通过游标生成SELECT 并逐步找到所有结果在sql server中:

--Author: Ah.Ghasemi

Declare @Select sysname;

DECLARE A CURSOR  
    FOR Select 'select ' + '*' + ' from ' + name 
        from sys.tables
        --Where  name like 'tbl%'
        Order by name
OPEN A 
FETCH NEXT FROM A INTO @Select
    While (@@FETCH_STATUS <>-1)
        Begin
            exec sp_executesql @Select

            FETCH NEXT FROM A INTO @Select;
        End

close A
Deallocate A

如果问题没有解决,请通知我们。

希望你能做到最好