我有一个未定义数量的表(x)。如何使SQL仅检索包含特定记录的表的名称? (y)的
答案 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)
谢谢。但是我无法使用此解决方案,因为所有表都包含相同的列。但是其中一些表在其中一列中包含特殊值。这个数据库中有很多表,所以我认为请求会很慢