只有在具有特定元素的情况下,才在mySQL中选择Tables的名称

时间:2013-10-31 22:32:42

标签: mysql sql

我有一个未定义数量的表(x)。如何使SQL仅检索包含特定记录的表的名称? (y)的

2 个答案:

答案 0 :(得分:4)

您不能一步完成此操作,因为SQL语言要求在准备查询时修复表。您不能编写一个查询未定义数量的表的查询。

我必须评论一下,如果您需要查询未定义数量的表,它听起来可能是一个有缺陷的设计。这是一个code smell - 不能保证设计不好,因为每个规则都有例外,但可能设计不好。

无论如何,我推荐的解决方案是首先查询INFORMATION_SCHEMA以查找包含您要搜索的列的表。

SELECT table_schema, table_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name = 'phone_number';

该查询将返回一些匹配项。然后,您可以编写应用程序代码来循环结果,将模式/表名称插入到单独的查询中。

PHP中的示例:

while ($row = $stmt->fetch()) {
    $sql = sprintf("SELECT * FROM `%s`.`%s` WHERE phone_number = ?",
      $row["table_schema"], $row["table_name"]);
    $stmt2 = $pdo->prepare($sql);
    $stmt2->execute([$phone_number]);
    $results[] = $stmt2->fetchAll();
}

答案 1 :(得分:0)

谢谢。但是我无法使用此解决方案,因为所有表都包含相同的列。但是其中一些表在其中一列中包含特殊值。这个数据库中有很多表,所以我认为请求会很慢