【问题标题】:Dynamically choose which table动态选择哪个表
【发布时间】:2017-10-14 08:43:54
【问题描述】:

我想让查询根据另一个表中特定行中的值动态选择要查找的表。

我有这个问题:

SELECT d.name

FROM `database1`.domains AS d
WHERE (SELECT COUNT(u.id) FROM <<d.db_name>>.users u) > 0

我想使用 d.db_name 的值作为数据库名称。 示例:d.db_name = database2

我想要这个:

SELECT d.name

FROM `database1`.domains AS d
WHERE (SELECT COUNT(u.id) FROM `database2`.users u) > 0

【问题讨论】:

  • 这听起来像是一个非常糟糕的数据架构。
  • 这个查询仅供我使用,用于统计。
  • 看看here
  • SQL 是一种特殊用途的声明性语言,其中基本的 DDL/DML 命令(如 SELECT)一旦设置为不可变的。您可以将 MySQL 存储过程用于更多动态例程,或使用应用层、通用语言(PHP、Python、C#、Java、VB)动态生成条件 SQL 查询。

标签: mysql sql


【解决方案1】:

您可以为此使用变量:

SET @table_name = "some_table";

SELECT * FROM @table_name;

如果您想根据选择的结果更改变量值,您可以像这样使用 IF:

IF(some_column>50, @table_name := "value for true", @table_name := "value for false");

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多