SELECT COUNT(*), table_name
FROM information_schema.COLUMNS
WHERE table_name IN ('t1', 't2')
AND table_schema=DATABASE()
GROUP BY table_name WITH ROLLUP
如果只需要不同名称的列的计数,可以这样做
SELECT COUNT(DISTINCT column_name), table_name
FROM information_schema.COLUMNS
WHERE table_name IN ('t1', 't2')
AND table_schema=DATABASE()
GROUP BY table_name WITH ROLLUP
2条答案
按热度按时间qvtsj1bj1#
您可以在mysql cli中实现它,但它有点像黑客(说得委婉一点),可能不适合您的要求,我真的不知道您想如何使用它。
您可以尝试使用pager命令并计算通过运行限制为1的查询返回的行数
e、 g.下面的join返回7列
将寻呼机设置为计数输出行,返回7
q7solyqu2#
专业提示:避免
SELECT *
除非你有很好的理由使用它。首先,它在JOIN
查询(在您的情况下id
两个表中的列)。相反,请在列表中列出所需列的名称SELECT
条款。另一方面,它通常返回的数据比应用程序中需要的数据多。这样就可以连接你的网络,也可以连接dbms客户机上的ram。
第三件事,在复杂的查询(如连接)中,dbms有时必须更加努力才能有效地检索所有列。这和覆盖索引之类的东西有关,你可以阅读。
回答您的问题:
你可以用
information_schema
获取有关表中列的信息。这个COLUMNS
表描述了系统中的所有表。这里我们计算表中的列t1
以及t2
. 这是你得到的列数如果你SELECT *
从这些表的连接。如果只需要不同名称的列的计数,可以这样做
但这取决于您的数据库设计,避免对具有不同含义的列使用相同的名称。许多数据库设计不是这样的。