我的数据库中有很多表都具有相同的结构。我想从所有表中进行选择,而不必像以下那样列出所有表:
SELECT name FROM table1,table2,table3,table4
我试过但这不起作用:
SELECT name FROM *
有没有办法选择数据库中的所有表而不在查询中列出每个表?
答案 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
如果问题没有解决,请通知我们。
希望你能做到最好