来自联接的mysql列计数

cyej8jka  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(211)

有没有办法从一个表中数出所有的列 join 结果是mysql?我知道有一种方法可以在 select 从单个表,但我不知道如何使用连接。

qvtsj1bj

qvtsj1bj1#

您可以在mysql cli中实现它,但它有点像黑客(说得委婉一点),可能不适合您的要求,我真的不知道您想如何使用它。
您可以尝试使用pager命令并计算通过运行限制为1的查询返回的行数
e、 g.下面的join返回7列

mysql> SELECT * from tuser1 t1 JOIN tuser2 t2 USING(id) limit 1\G

***************************1. row***************************

   id: 15
email: hello
  uid: 2
 enum: 3
email: hello
  uid: 2
 enum: 3
1 row in set (0.00 sec)

将寻呼机设置为计数输出行,返回7

mysql> PAGER grep -v '\*\*' | wc -l;
PAGER set to 'grep -v '\*\*' | wc -l'
mysql> SELECT * from tuser1 t1 JOIN tuser2 t2 USING(id) limit 1\G
7
1 row in set (0.00 sec)

mysql> nopager
PAGER set to stdout
q7solyqu

q7solyqu2#

专业提示:避免 SELECT * 除非你有很好的理由使用它。首先,它在 JOIN 查询(在您的情况下 id 两个表中的列)。相反,请在列表中列出所需列的名称 SELECT 条款。
另一方面,它通常返回的数据比应用程序中需要的数据多。这样就可以连接你的网络,也可以连接dbms客户机上的ram。
第三件事,在复杂的查询(如连接)中,dbms有时必须更加努力才能有效地检索所有列。这和覆盖索引之类的东西有关,你可以阅读。
回答您的问题:
你可以用 information_schema 获取有关表中列的信息。这个 COLUMNS 表描述了系统中的所有表。这里我们计算表中的列 t1 以及 t2 . 这是你得到的列数如果你 SELECT * 从这些表的连接。

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

但这取决于您的数据库设计,避免对具有不同含义的列使用相同的名称。许多数据库设计不是这样的。

相关问题