2016-09-09 2 views
0

열이 아닌 모든 행을 얻으려고하면 특정 값이 아닙니다.레일에서 POSTGRES의 쿼리에서 nil 값을 얻는 방법

Task.where('owner_user_id != ?', 429) 

그러나 owner_user_id가 nil 인 행은 반환되지 않습니다. 시도하고 싶지는 않지만 다음과 같은 오류가 발생합니다.

Task.where('owner_user_id is distinct from (429)') 
    Task Load (2.3ms) SELECT "tasks".* FROM "tasks" WHERE (owner_user_id is distinct from (429)) LIMIT 10 OFFSET 0 
    SQLite3::SQLException: near "distinct": syntax error: SELECT "tasks".* FROM "tasks" WHERE (owner_user_id is distinct from (429)) LIMIT 10 OFFSET 0 
    #<Task::ActiveRecord_Relation:0x007f07940ea338> 

열이 특정 값이 아닌 모든 행 (nil을 포함하는 모든 행 포함)을 가져 오는 방법은 무엇입니까?

+0

당신은 postgresql에 대해 묻고 있지만,보고 한 오류는 SQLite3 오류입니다. 올바른 데이터베이스에 연결하고 있습니까? – jmelesky

답변

1

이를 하나 개의 단일 쿼리를 발사하고 당신에게 nil 값을 포함하여 결과를 줄 것이다 :

Task.where('owner_user_id != ? OR owner_user_id IS NULL', 429) 

는 희망이 도움이!

1

이 2 개 쿼리를 발생하지만이 원하는 결과

Task.where.not(id: Task.where(owner_user_id: 429).pluck(:id)) 
0

!=를 반환하기 때문에,

/SQL을하지만, 대신 <> 필요 그레스에서 "동일하지"말의 루비 방법입니다
Task.where('owner_user_id <> ?', 429) 

또는 arel에 당신은 또한 수행 할 수 있습니다

Task.where.not(:owner_user_id => 429) 
+1

<> 및! =은 같은 것입니다. https://www.postgresql.org/docs/9.1/static/functions-comparison.html – AndreyS

+0

kewl, yep는 다음과 같습니다. P : D –

+0

어느 솔루션도 작동하지 않습니다. –

관련 문제