mysql - 具有动态表名的 SELECT 查询和子选择查询

标签 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 行的“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/

相关文章:

c# - Entity Framework 6 多表对一外键关系代码先

sql - 两个不同的表还是只有一个带有 bool 列的表?

mysql - MySQL中使用窗口函数的移动平均线

mysql - 锁可以防止不可重复读取吗?

sql - 如何使用 Sequelize 对连接表生成查询?

php - 根据 GMT 转换日期和时间

php - PHP 4 中的新 DOMDocument()

sql - 优化对大表的最近行的查询性能

mysql - 如何在 MySQL 数据库中使用 Oracle 融合中间件?

php - 通过php链接来自mysql的数据