我想定义一个这样的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。
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(旁边续集内部程序)答案 0 :(得分:6)
额外SELECT的原因是DB[:girls].union(DB[:boys]).where(:some_column=>1)
之类的代码正常运行。您可以使用DB[:girls].union(DB[:boys], :from_self=>false)
将其包装在额外的SELECT中,如documentation中所述。