我有两个查询,可用查询和活动查询。
如果有活动的行,我想将其从可用行中排除。
在下面查看我的尝试
active_params = (AvailParam
.select()
.join(AvailParamPhones)
.join(Phone)
.where(AvailParamPhones.phone == phone)
.order_by(AvailParam.base_param.name)
)
avail_params = (AvailParam
.select()
.join(AvailParamPhones, JOIN.LEFT_OUTER)
.where( AvailParam.select() << active_params )
.order_by(AvailParam.base_param.name)
)
这给了我
TypeError:<<:'ModelSelect'和'ModelSelect'不受支持的操作数类型
在排除上一个查询的成员时应该如何查询?
谢谢!
答案 0 :(得分:1)
首先,使用“ AvailParam.id.in_(active_params)” ...在IN子句的左侧和右侧进行选择没有任何意义:< / p>
avail_params = (AvailParam
.select()
.join(AvailParamPhones, JOIN.LEFT_OUTER)
.where( AvailParam.id.in_(active_params) )
.order_by(AvailParam.base_param.name))
如果您不想进入,请使用AvailParam.id.not_in(...):
avail_params = (AvailParam
.select()
.join(AvailParamPhones, JOIN.LEFT_OUTER)
.where( AvailParam.id.not_in(active_params) )
.order_by(AvailParam.base_param.name))
如果数据库支持EXCEPT,则还可以使用复合选择查询。示例: