我有未定义数量的表 (x)。如何让 SQL 只检索包含特定记录的表的名称?(y)
问问题
201 次
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 回答