我正在为练习做一些练习,我坚持这个问题
编写查询以显示A1_AdventureWorks数据库中五个“最宽”表的列表。如果表有很多列,则表被认为是宽的。不要包含任何视图或系统表。
到目前为止我有这个,但我得到一些随机的答案
USE A1_AdventureWorks;
SELECT name
FROM sys.objects
我知道我必须使用类型功能,但不知道在哪里使用它 请协助
答案 0 :(得分:2)
object_id
和sys.objects加入了select O.name
from sys.objects as O
inner join sys.columns as C
on O.object_id = C.object_id
。
where O.type = 'U'
要仅获取用户表,您需要在O.name
上进行过滤。
要计算每个表格的列数,您需要按count(*)
进行分组,并将select top(5)
添加到字段列表中。
要获得前5名,您应该使用order by count(*) desc
,并且还需要添加schema_id
。
在SQL Server中,您可以在不同的架构中使用相同的表名,因此您还需要按{{1}}进行分组。
答案 1 :(得分:0)
mysql_list_tables获取数据库中的所有表 供参考 http://php.net/manual/en/function.mysql-list-tables.php
$result = mysql_query("SELECT * FROM `table`");
while ($row = mysql_fetch_row($result))
{
foreach ($row as $item)
$counter=++$i;
}
获取表中的行数
答案 2 :(得分:0)
存在同样的问题:Find the number of columns in a table
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'database_name'
AND table_name = 'tbl_name'
更新:你也可以使用sys.columns:
use yourDataBase
SELECT COUNT(*)
FROM sys.columns
WHERE OBJECT_NAME(object_id) = 'table_name'
此分配的答案:在sqlserver中找到5个最宽的表查询:
use yourDataBase
select top 5 OBJECT_NAME(object_id)as name,count(*)as num_of_col from sys.columns
where object_id in (select object_id from sys.tables)
group by object_id
order by num_of_col desc
答案 3 :(得分:0)
select top 5 name
from (select a.name,count(b.name) 'CNT'
from sysobjects a , syscolumns b
where a.xtype = 'U' -- For considering only user tables -- no views or sys tables
and a.id = b.id
group by a.name) a
order by CNT desc