次のような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
(続編の内部手順のほかに) - 選択を回避できますか?
- この追加の選択で問題が発生する可能性はありますか?(パフォーマンスの問題はありますか?)