我想定义一个这样的 SQL 命令:
SELECT * FROM WOMAN
UNION
SELECT * FROM MEN
我尝试在 Ruby + Sequel 中使用以下代码序列来定义它:
require 'sequel'
DB = Sequel::Database.new()
sel = DB[:women].union(DB[:men])
puts sel.sql
结果是(我在结果上做了一些漂亮的打印):
SELECT * FROM (
SELECT * FROM `women`
UNION
SELECT * FROM `men`
) AS 't1'
还有一个额外的(多余的?)SELECT
。
如果我UNION
在此代码示例中定义多个类似
sel = DB[:women].union(DB[:men]).union(DB[:girls]).union(DB[:boys])
puts sel.sql
我得到更多多余的选择。
SELECT * FROM (
SELECT * FROM (
SELECT * FROM (
SELECT * FROM `women`
UNION
SELECT * FROM `men`
) AS 't1'
UNION
SELECT * FROM `girls`
) AS 't1'
UNION
SELECT * FROM `boys`
) AS 't1'
到目前为止我没有发现它有任何问题,结果似乎是一样的。
我的问题:
- 是否有额外
select
的 s 的原因(除了后续的内部程序) - 我可以避免选择吗?
- 我会遇到这个额外选择的问题吗?(任何性能问题?)