SELECT查询和带动态表名的子选择查询

时间:2012-11-08 14:07:36

标签: mysql sql

我有一个关于我的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行的“代码”列值。如何在子选择查询中生成动态表名?

感谢您的帮助。

1 个答案:

答案 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