0

我的 MySQL 数据库结构有一个有趣的情况。

假设我有三个数据库表:table_Main、table_sub_A、table_sub_B

“table_Main”字段:

  • 行号
  • 代码(该字段用于查找“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 行的“代码”列值。如何在子选择查询中生成动态表名?

谢谢你的帮助。

4

1 回答 1

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
于 2012-11-08T14:11:52.657 回答