Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Rails 3,准备好的查询不使用nil值_Sql_Ruby On Rails_Ruby_Ruby On Rails 3_Postgresql - Fatal编程技术网

Sql Rails 3,准备好的查询不使用nil值

Sql Rails 3,准备好的查询不使用nil值,sql,ruby-on-rails,ruby,ruby-on-rails-3,postgresql,Sql,Ruby On Rails,Ruby,Ruby On Rails 3,Postgresql,这是我的问题 query = "(description = ? AND address1 = ?) AND (city = (?) OR old_city = (?) OR cb_city = (?))" 输入数据: office_data = {"description"=>"Europe HQ", "city"=>"Dublin", "street_1"=>nil} 但当我询问 office = company.offices.where(query, office

这是我的问题

query = "(description = ? AND address1 = ?) AND (city = (?) OR old_city = (?) OR cb_city = (?))"
输入数据:

office_data = {"description"=>"Europe HQ", "city"=>"Dublin", "street_1"=>nil}
但当我询问

 office = company.offices.where(query, office_data["description"], office_data["street_1"], office_data["city"], office_data["city"], office_data["city"]).first
等效SQL:

SELECT "offices".* FROM "offices" WHERE "offices"."company_id" = 6 AND ((description = 'Europe HQ' AND address1 = NULL) AND (city = ('Dublin') OR old_city = ('Dublin') OR cb_city = ('Dublin'))) LIMIT 1
结果是

nil
虽然我是公司的记录员

作为


不知道查询有什么问题吗?有人知道怎么了吗

问题是使用=符号将地址与NULL进行比较-除此之外的所有针对NULL的操作都是false。正因为如此,你最终得到了真与假和…,最终导致了假


请注意,您在注释中添加的第二个查询不包含address=NULL,这就是它在这种情况下工作的原因。

正如@misha和@Victor所指出的,问题确实是NULL=。要解决此问题,请更改查询参数,如下所示:

查询=描述=?地址1=?或address1为空且city=或old_city=或cb_city=

无需更改office_数据参数或您的查询


同样,您可能还需要更改城市和其他参数。因为它们也可以有一个空值

似乎数据库中有city:nil,但是,在查询中,city='Dublin'或old_city='Dublin'或cb_city='Dublin',那么,在生成的SQL中,address1=NULL,应该是address1。我不知道怎么解决这个问题。@RAJ。。。不,实际上,当我尝试使用office=f.offices.wherequery、office\u data[city]、office\u data[city]、office\u data[city]时。首先,我得到的结果是记录,我认为这不是问题所在,请选择office.*从office.company\u id=6和city='Dublin'或old\u city='Dublin'或cb\u city='Dublin'LIMIT 1的办公室获取结果
[#<Office id: 393, company_id: 6, description: "Europe HQ", address1: nil, address2: nil, zip_code: nil, city: nil, state_code: nil, country_code: nil, latitude: nil, longitude: nil, created_at: "2014-08-19 15:13:58", updated_at: "2014-08-19 15:13:58", cb_city: "Dublin", cb_state_code: nil, cb_country_code: "IRL", old_city: nil, region_code: nil, is_hq: nil, cb_region: "Dublin", cb_updated: "2014-04-20 10:53:24", city_uuid: "97c70aa17568ca5375122f181f0484a7", city_path: "location/dublin/97c70aa17568ca5375122f181f0484a7">, #<Office id: 389, company_id: 6, description: "Europe HQ", address1: nil, address2: nil, zip_code: nil, city: nil, state_code: nil, country_code: nil, latitude: nil, longitude: nil, created_at: "2014-08-19 15:02:44", updated_at: "2014-08-19 15:02:44", cb_city: "Dublin", cb_state_code: nil, cb_country_code: "IRL", old_city: nil, region_code: nil, is_hq: nil, cb_region: "Dublin", cb_updated: "2014-04-20 10:53:24", city_uuid: "97c70aa17568ca5375122f181f0484a7", city_path: "location/dublin/97c70aa17568ca5375122f181f0484a7">]