Ruby Sequel数据集的布尔组合
假设我有一些数据集方法Ruby Sequel数据集的布尔组合,ruby,sequel,Ruby,Sequel,假设我有一些数据集方法foo,bar和baz class User < Sequel::Model dataset_module do def foo # Some complicated dataset here where(:c => 42, :d => 23) end def bar # Even more complicated dataset here where(:a => 5, :
foo
,bar
和baz
class User < Sequel::Model
dataset_module do
def foo
# Some complicated dataset here
where(:c => 42, :d => 23)
end
def bar
# Even more complicated dataset here
where(:a => 5, :b => 23).or(:a => 23, :b => 5)
end
def baz
where(:d => 17)
end
end
end
编辑:澄清:
我得到了什么
我想要的
从用户中选择*,其中((或)和(或))
其中
表示我定义的数据集。所以
定义为(c=42和d=23)
定义为((a=5,b=23)或(a=23,b=5))
定义为(d=17)
如何将数据集方法与
和
、或
和(最重要的)括号链接起来?我认为您的方法应该返回续集表达式,请看:您不是在寻找并集和交集方法吗。这些是在数据集上工作的,可以用来代替集合论中的“and”和“OR”
像这样的东西对你不管用吗
fooOrbar = User.foo.union(User.bar)
barOrbaz = User.bar.union(User.baz)
result = fooOrbar.intersect(barOrbaz)
不,它们不会,因为数据集模块返回数据集。我正在寻找一种组合数据集的方法(不仅仅是与
和链接,比如Model.dataset1.dataset2
,而是与和、或以及括号(如问题中所述)相结合)。实际上,您不是在尝试实现内部联接吗?不,我正在尝试在同一个表上组合不同的数据集。不需要联接。在您的示例中,所有数据都将来自Users表,对吗?只是因为你只处理一个表,但我不想加入。我只想合并数据集。请修复您的代码,它无效::a=>23,b:=>5
。此外,方法dataset\u方法从何而来?在Ruby 2.1.0和Sequel 4.8.0上运行固定代码,会产生一个NoMethodError
:未定义的方法“dataset\u methods”for User:Class
。是的,这将返回给定的数据,但会生成一个查询,包括UNION
和INTERSECT
。我想得到一个查询,包括和和或。
SELECT * FROM users WHERE ((`foo` OR `bar`) AND (`bar` OR `baz`))
SELECT * FROM users WHERE ((<dataset foo> OR <dataset bar>) AND (<dataset bar> OR <dataset baz>))
fooOrbar = User.foo.union(User.bar)
barOrbaz = User.bar.union(User.baz)
result = fooOrbar.intersect(barOrbaz)