如何选择多个硬编码的SQL行?
问题的出现原因:用户想要选择多个硬编码SQL行,但不确定应该如何实现。
解决方法:使用UNION ALL操作符。它比UNION操作符更快,并且可以得到互斥的行。
以下是帮助我解决问题的Oracle答案:
stackoverflow.com/questions/10353969/...
与UNION操作符相反,UNION ALL操作符会生成重复的行,而UNION操作符会生成互斥的行。
在SQL中,有时候需要选择多个硬编码的行。下面的内容提供了一种解决方法:
SELECT 'test-a1' AS name1, 'test-a2' AS name2 UNION ALL SELECT 'test-b1', 'test-b2' UNION ALL SELECT 'test-c1', 'test-c2'
上述代码使用了UNION ALL关键字,它可以将多个SELECT语句的结果合并为一个结果集。每个SELECT语句表示一个硬编码的行。在这个例子中,我们选择了三个硬编码的行,每个行包含两列。
通过使用AS关键字,我们给每个列指定了一个别名。在这个例子中,第一列的别名是name1,第二列的别名是name2。
使用UNION ALL关键字时,请确保每个SELECT语句返回相同数量和类型的列。否则,查询将无法执行成功。
通过这种方式,我们可以选择多个硬编码的行。这对于某些特定的需求非常有用,例如需要在查询结果中添加一些固定的行。
希望这个解决方法对你有帮助!
如何选择多个硬编码的SQL行?
在选择多个硬编码的SQL行时,可以使用以下方法:
select * from (values ('test-a1', 'test-a2'), ('test-b1', 'test-b2'), ('test-c1', 'test-c2')) x(col1, col2)
但是,为什么UNION ALL的答案比这个更受欢迎呢?这段代码在MuSQL 5.6.25中无法运行,这是5.7的新特性吗?我在MS SQL Server中测试了这个例子,运行得很好,但在Oracle中却不行。在10.6.4-MariaDB-1:10.6.4+maria~focal-log中返回语法错误。但在Postgres中可以工作!Postgres文档将其写为`SELECT * FROM (VALUES (...), (...), ....) AS t(col_name1, ...)`。
此方法在Excel中非常容易使用,可以生成每行一个`(A2, B2)`的插入行。