来自联接的MySQL列计数
有没有办法计算MySQL中来自联接的MySQL列计数,mysql,join,Mysql,Join,有没有办法计算MySQL中join结果中的所有列? 我已经看到有一种方法可以在从单个表中选择,但我没有弄清楚如何使用join来实现它。您可以在mysql cli中实现它,但这有点像黑客(委婉地说),可能不适合您的要求,我真的无法想象您希望如何使用它 您可以尝试使用PAGER命令,并通过使用LIMIT 1运行查询来计算返回的行数 e、 g.以下联接返回7列 mysql> SELECT * from tuser1 t1 JOIN tuser2 t2 USING(id) limit 1\G **
join
结果中的所有列?
我已经看到有一种方法可以在
从单个表中选择,但我没有弄清楚如何使用join来实现它。您可以在mysql cli中实现它,但这有点像黑客(委婉地说),可能不适合您的要求,我真的无法想象您希望如何使用它
您可以尝试使用PAGER命令,并通过使用LIMIT 1运行查询来计算返回的行数
e、 g.以下联接返回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
专业提示:避免选择*
,除非你有很好的理由使用它。首先,它在JOIN
查询中返回冗余列(在您的例子中,是两个表中的id
列)。相反,在SELECT
子句中列出所需列的名称
另一方面,它通常返回的数据比应用程序中需要的数据多。这会连接您的网络,可能还会连接dbms客户机上的RAM
第三,在复杂的查询(如联接)中,dbms有时必须更加努力才能高效地检索所有列。这与覆盖索引之类的内容有关,您可以阅读这些内容
要回答您的问题:
您可以使用information\u模式
获取有关表中列的信息。列
表描述了系统中的所有表。这里我们统计表t1
和t2
中的列。如果从这些表的联接中选择*
,将得到的列数
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
但这取决于您的数据库设计,避免对具有不同含义的列使用相同的名称。许多数据库设计都不是这样。“…计算所有列…”您要计算列数还是行数?无法计算列数。数数行,你可以做到。