展示SQL虚拟/临时表的方法:从关联数组中提取数据
P粉066224086
2023-09-03 16:26:28
<p>我需要一个简单的SQL查询来显示一个虚拟/临时表,而不需要在数据库中创建它。</p>
<p>我使用PHP来创建带有数据的查询字符串。</p>
<p>我的当前PHP代码是:</p>
<pre class="brush:php;toolbar:false;">$array = [
['id' => 1, 'name' => 'one'],
['id' => 2, 'name' => 'two'],
['id' => 3, 'name' => 'three']
];
$subQuery = "SELECT {$array[0]['id']} AS col1, '{$array[0]['name']}' AS col2";
for ($i=1; $i < count($array); $i++) {
$subQuery .= " UNION ALL SELECT {$array[$i]['id']}, '{$array[$i]['name']}'";
}
$sql = "WITH cte AS
(
{$subQuery}
)
SELECT col1, col2 FROM cte;";
echo $sql;</pre>
<p>它的输出是:</p>
<pre class="brush:php;toolbar:false;">WITH cte AS
(
SELECT 1 AS col1, 'one' AS col2 UNION ALL SELECT 2, 'two' UNION ALL SELECT 3, 'three'
)
SELECT col1, col2 FROM cte;
// Output table from the SQL
col1 col2
1 one
2 two
3 three</pre>
<p>我从这里得到了这个查询的想法。</p>
<p>但是这个查询的问题是,如果$array中有100个数据,<strong>UNION ALL</strong>部分会在SQL中包含100次。我觉得这不是一个更好的SQL,因为它就像同时联合了100个表。</p>
<p>我也可以创建一个临时表(<strong>CREATE TEMPORARY TABLE table_name</strong>)来代替这个<strong>WITH</strong>子句,但这不是一个单一的查询,因为我需要另一个查询来将记录插入到临时表中。</p>
<p>有人可以帮我以更好的方式简化这个查询吗?</p>
当您使用MySQL 8时,可以使用
json_table
表达式,如下所示:PHP在线编辑器
在MySQL 8.0中,上述查询的结果如下: