Sql 使用联合续集
我想定义如下的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
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'
到目前为止,我没有发现任何问题,结果似乎是一样的
我的问题是:
- 是否有其他
s的原因(除了后续内部程序之外)select
- 我可以避免选择吗
- 我可以得到这个额外的选择问题吗?(有性能问题吗?)
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'