我有一个带有Customer
和ShippingAddress
模型的rails应用。它是通过一对多关系实现的,因此ShippingAddress
可以拥有多个客户。
我成功地能够使用include语句查询这两个模型和其他几个模型,但是当我尝试更新查询以查找没有shipping_address
得到0结果的所有客户时,甚至虽然我可以从我的数据库管理工具中找到我有多个客户,其中shipping_address_id
的值为nil
。
这些查询有效,但没有给我没有地址的客户:
Customer.includes(:orders, :shipping_address).where('customers.name LIKE ? or customers.mail LIKE ?', searchstring, searchstring)
Customer.where('customers.shipping_address_id = ?',2)
这些尝试使上述内容适应没有添加的客户并不是
Customer.includes(:orders, :shipping_address).where('shipping_address = ?', nil)
Customer.includes(:orders, :shipping_address).where('shipping_address = NULL')
# At the very least I should be able to get the right result by referencing the fk directly, but no?
Customer.where('customers.shipping_address_id = ?',nil)
我在这里缺少什么?
答案 0 :(得分:1)
在您习惯之前,NULL值可能会令人惊讶。从概念上讲,NULL表示“缺少未知值”,并且与其他值的处理方式略有不同。
您无法使用等于null来比较null,您必须使用IS NULL。因此,请将您的查询更新为
Customer.includes(:orders, :shipping_address).where('customers.shipping_address_id IS NULL')
或者这样做的轨道方式是
Customer.where(shipping_address_id: nil).includes(:orders, :shipping_address)
答案 1 :(得分:1)
您也可以这样做:
@customers_without_shipping_ids = Customer.where('shipping_address_id IS NULL').all
答案 2 :(得分:1)
请试试这些查询
Customer.all(:conditions => ['shipping_address_id IS NULL'])
和
Customer.includes(:orders, :shipping_address).where('shipping_address_id IS NULL')