我的 MySQL 数据库结构有一个有趣的情况。
假设我有三个数据库表:table_Main、table_sub_A、table_sub_B
“table_Main”字段:
- 行ID
- 代码(此字段用于查找“table_sub_”表
- 姓名
“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 行的“Code”列值。如何在子选择查询中生成动态表名称?
感谢您的帮助。
最佳答案
你不能
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
关于mysql - 具有动态表名的 SELECT 查询和子选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13290576/