1

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

4

2 回答 2

4

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

我不得不评论说,如果您需要查询未定义数量的表,这听起来可能是一个有缺陷的设计。这是一种代码味道——不能保证设计不好,因为每条规则都有例外,但可能设计不好。

无论如何,我推荐的解决方案是首先查询 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();
}
于 2013-10-31T22:43:36.670 回答
0

谢谢你。但我不能使用这个解决方案,因为所有表都包含相同的列。但是其中一些表在其中一列中包含一个特殊值。而且这个DB里面有很多表,所以我认为请求会很慢

于 2013-11-01T07:40:13.290 回答