I would like to ask if how can I query entries without including their
duplicates?
class CreatesStudent < ActiveRecord::Migration
def self.up
create_table :students do |t|
t.string :first_name
t.string :middle_name
t.string :last_name
t.timestamps
end
end
I would like to ask if how can I query entries without including their
duplicates?
class CreatesStudent < ActiveRecord::Migration
def self.up
create_table :students do |t|
t.string :first_name
t.string :middle_name
t.string :last_name
t.timestamps
end
end
def self.down
drop_table :profiles
end
end
Also worth noting that if you did have duplicates in the table you show
here then you’d be saying that you have two people with exactly the same
name. Possible of course, but without additional detail you would have a
tough time knowing which one was which.
Doing a uniq query on this table would probably be a bad idea. You would
have one result that represents two, or more, different people and you
would have no way to know which one was which.
By default Rails will automatically provide a unique index in the form
of an auto-incrementing integer id column. It uses that as the primary
key for the table. A normal query will include that column so there is
generally no need for distinct queries (i.e. SELECT DISTINCT).
On the other hand, if you actually have duplicate records that represent
the same person then you’ve got a bad design problem that you should fix
right way.
General rule of thumb is that distinct queries should be fairly rare in
ORM based frameworks. The mapping could get easily confused by not
knowing which object represents which row in the table.
I had assumed (quite possibly wrongly) that the OP wanted to find, for
example, all unique last_names, for example, in which case I think he
could do something like
Student.select(:last_name).uniq
but if this is not the case then Robert is correct.
That could certainly be the case. I also assumed the table example shown
must have been an oversimplification of what the OP was actually trying
to do. I was just attempting to clarify the implications of using uniq
in the context of an ORM.
It’s important to understand that using .uniq creates ambiguity. The
objects in the resulting array no longer represent unique rows in the
table. As such, those objects should not be used for updating the
database.
t.string :middle_name
Also worth noting that if you did have duplicates in the table you show
key for the table. A normal query will include that column so there is
generally no need for distinct queries (i.e. SELECT DISTINCT).
On the other hand, if you actually have duplicate records that represent
the same person then you’ve got a bad design problem that you should fix
right way.
General rule of thumb is that distinct queries should be fairly rare in
ORM based frameworks. The mapping could get easily confused by not
knowing which object represents which row in the table.
I had assumed (quite possibly wrongly) that the OP wanted to find, for
example, all unique last_names, for example, in which case I think he
could do something like
Student.select(:last_name).uniq
but if this is not the case then Robert is correct.
Colin
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.