用于通配符列选择的动态 SQL
问题:
假设你有一个数据库表多个列共享相似的前缀,例如“水果”和“蔬菜”。如何在不手动指定每个列名的情况下,高效地从以特定单词开头的所有列中选择数据?
示例:
考虑以下表结构:
<code class="markdown">Foods | Fruit | Vegetable ---------------------- Apples | Banana | Carrots Pears | Grapes | Potatoes Oranges | Lemon | Tomatoes</code>
您希望选择名称以“Vegetable”开头的所有列。
答案:
MySQL 查询中的直接通配符替换,例如 SELECT菜%,不支持。要动态选择满足此条件的所有列,您可以根据从数据库模式获取的信息构建 SQL 查询。这是一个解决方案:
<code class="sql">SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'Foods' AND table_schema = 'YourDB' AND column_name LIKE 'Vegetable%'</code>
此查询检索 Foods 表中以“Vegetable”开头的所有列的名称。然后,您可以使用此信息动态构建第二个查询,从所需列中选择数据:
<code class="php">$columnList = mysql_query($columnsQuery); $columnArray = array(); while ($row = mysql_fetch_assoc($columnList)) { array_push($columnArray, $row['COLUMN_NAME']); } $columns = implode(",", $columnArray); $query = "SELECT " . $columns . " FROM Foods";</code>
通过执行此查询,您可以从名称以“Vegetable”开头的列中检索所有数据一次通过。
以上是如何在 MySQL 中使用动态 SQL 从具有相似前缀的列中选择数据?的详细内容。更多信息请关注PHP中文网其他相关文章!