我有一个关于我的MySQL数据库结构的有趣情况。
假设我有三个数据库表:table_Main,table_sub_A,table_sub_B
“table_Main”字段:
示例“table_Main”行:
1,A,Test A
2,B,Test B
现在,我想构建一个SQL查询,它将从table_Main中检索所有行,但也从每个table_Main行的相应表中获取count(*)。
SELECT *, (SELECT COUNT(*) FROM table_sub_XXXX) AS TotalRecords FROM table_Main
问题从这里开始。 XXXX应该是每个对应的table_Main行的“代码”列值。如何在子选择查询中生成动态表名?
感谢您的帮助。
答案 0 :(得分:1)
你不能
SELECT
*,
(SELECT COUNT(*) FROM table_sub_A) AS TotalRecordsA,
(SELECT COUNT(*) FROM table_sub_B) AS TotalRecordsB
FROM
table_Main
但是,MySQL可能会评估table_Main
所以我这样做是为了帮助查询优化器
SELECT
*, TotalRecordsA, TotalRecordsB
FROM
table_Main
CROSS JOIN
(SELECT COUNT(*) AS TotalRecordsA FROM table_sub_A) A
CROSS JOIN
(SELECT COUNT(*) AS TotalRecordsB FROM table_sub_B) B