Sql 使用联合续集

Sql 使用联合续集,sql,ruby,union,sequel,Sql,Ruby,Union,Sequel,我想定义如下的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 如果我像在这个代码示例中一样定义多个联合 sel = DB

我想定义如下的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

如果我像在这个代码示例中一样定义多个
联合

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的原因(除了后续内部程序之外)
  • 我可以避免选择吗
  • 我可以得到这个额外的选择问题吗?(有性能问题吗?)

额外选择的原因是代码类似于
DB[:girls].union(DB[:boys])。其中(:some_column=>1)
运行正常。您可以使用
DB[:girls].union(DB[:boys],:from_self=>false)
不将其包装在额外选择中,如中所述。

谢谢。我总是很惊讶,续集的效果是多么好——而且我总是从文档中漏掉它(我肯定我看过工会文档)。
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'