我应该如何编写这个SQL查询,以便我只抓取用户表中不存在的数字?

时间:2014-12-16 19:48:50

标签: mysql sql ruby-on-rails ruby-on-rails-4 activerecord

我有两个像这样结构的表

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :facebook_id
      t.string :phone_number

      t.timestamps
    end
  end
end

class CreateNumbers < ActiveRecord::Migration
  def change
    create_table :numbers do |t|
      t.string :number, :unique => true

      t.timestamps
    end
  end
end

我需要编写一个从数字表中获取数字的查询 如果没有具有该特定号码的用户,或者如果Facebook_id为空,则需要具有该号码的用户,然后继续并获取该号码

这是我到目前为止所拥有的内容,但如果有一个用户使用该号码,它似乎只会抓取数字

numbers = Number.joins('left join users on numbers.number = users.phone_number').where('users.facebook_id LIKE ? and numbers.number is not null','')

1 个答案:

答案 0 :(得分:1)

您希望将搜索条件放在LEFT JOIN ... ON子句中。在WHERE子句中提及LEFT JOIN中属于右侧表格的列会将其转换为INNER JOIN

试试这个:

'left join users on numbers.number = users.phone_number AND users.phone_number IS NULL' 

获取您遗失的电话号码标准。

我不确定我理解你的空白脸谱ID标准。但你可以试试这个

'left join users on numbers.number = users.phone_number 
                  AND (    users.phone_number IS NULL
                        OR users.facebook_id IS NULL
                        OR LENGTH(users.facebook_id) = 0'