AcMEGX there is currently no way to do a "Select distinct" in SOQL. I would recommend voting for and posting a comment on the Idea that I linked to earlier in the thread.
Thats crap!!! It makes sense to make one field unique but what about composite primary keys...So I have to basically weed out the duplicate stuff in controller..hmmmm...they should have thought about Distinct..Infact their SOQL needs to be more thorough
All SObjects are distinct. What gave you the impression that they aren't?
I think its helpful to think about the SObjects from an Object-Oriented view rather than a strict relational database sense.
Every SObject has an id and every id is unique. While there are edge cases for a distinct application they are in general very edge and can usually be rectified by shifting your perspective to what you are actually querying.
Creating an object with an unique Id does not make it distinct. If that would have been the case none of the database vendors would have provided the concept. I agree with you that we have to look sObjects as objects from OO Design and not tables/rows from a strict RDBS persepective. But eventually they get stored in the Database and when u want to query an object which is a combination of 3 primary keys u just cannot. Also while creating an object SF does not provide u the option of creating a composite PK which engulps 2 or 3 fields. In that case all we are left out iwith no other option but to weed out the duplicates in your code. That aint good...
Dont get me wrong buddy..Thats a requirement in our app and as this is a place to exchange ideas and stuff i thought of doing the same...At retrospect i should have not started my post with "crap"...My apologies...
"
Creating an object with an unique Id does not make it distinct" -- It does not make the other fields on an object distinct, but it definitely makes the id field distinct, and since the id field is the primary key, the object itself distinct. OO, not relational.
Salesforce provides each SObject you create with a unique primary key. This is the id field. If you wanted to store the object in your own database, why wouldn't you already use the unique identifier provided?
"when u
want to query an object which is a combination of 3 primary keys u just
cannot" --- if they are primary keys, then they are unique.
"object SF does not provide u the option
of creating a composite PK which engulps 2 or 3 fields" -- it is fairly trivial to create a unique custom field that is populated either through a trigger, s-control or formula field that is exactly that. However, why would you create such a field when a valid primary key is already provided for you?
The problem you are describing still does not seem to need the distinct keyword.
Can you post some of your apex code logic that you need to use to de-dupe? Maybe that would shed some light on the problem at hand.
Ender, you're not considering the records in their REALTIONSHIPS to one another - sure, Salesforce isn't a full RDBMS, but it is still a relational data store - distinct object IDs can still show up multiple times in the foreign key field (Lookup or Master-Detail relationship) of another object, either in a one-to-many or many-to-many join. It would be immensely helpful to be able to do a "Select DISTINCT ContactID From Case Where Priority = 'High'", or something like that. The fact that the records stored in an object always have unique keys within that same object isn't relevant to this discussion.
Can you show us how to get the results that we want using straight SOQL, without the ability to use a DISTINCT command?
AcMEGX there is currently no way to do a "Select distinct" in SOQL. I would recommend voting for and posting a comment on the Idea that I linked to earlier in the thread.
All Answers
http://ideas.salesforce.com/article/show/69480/Select_Distinct_Expression_in_SOQL
http://ideas.salesforce.com/article/show/69480/Select_Distinct_Expression_in_SOQL
Message Edited by apexsutherland on 02-18-2008 08:13 PM
I think its helpful to think about the SObjects from an Object-Oriented view rather than a strict relational database sense.
Every SObject has an id and every id is unique. While there are edge cases for a distinct application they are in general very edge and can usually be rectified by shifting your perspective to what you are actually querying.
Dont get me wrong buddy..Thats a requirement in our app and as this is a place to exchange ideas and stuff i thought of doing the same...At retrospect i should have not started my post with "crap"...My apologies...
" Creating an object with an unique Id does not make it distinct" -- It does not make the other fields on an object distinct, but it definitely makes the id field distinct, and since the id field is the primary key, the object itself distinct. OO, not relational.
Salesforce provides each SObject you create with a unique primary key. This is the id field. If you wanted to store the object in your own database, why wouldn't you already use the unique identifier provided?
"when u want to query an object which is a combination of 3 primary keys u just cannot" --- if they are primary keys, then they are unique.
"object SF does not provide u the option of creating a composite PK which engulps 2 or 3 fields" -- it is fairly trivial to create a unique custom field that is populated either through a trigger, s-control or formula field that is exactly that. However, why would you create such a field when a valid primary key is already provided for you?
The problem you are describing still does not seem to need the distinct keyword.
Can you post some of your apex code logic that you need to use to de-dupe? Maybe that would shed some light on the problem at hand.
.
Can you show us how to get the results that we want using straight SOQL, without the ability to use a DISTINCT command?
Distinct isn't necessary in your case but yes, absolutely helpful and warranted.
Here it is without distinct using sql syntax
"Select contactid from contact where contactid in (select contactid from case where priority = 'high')"
Hi Guys,
I think this thread is old however I have a concern that is similar to the subject of this thread...
Quick question: how do i do this in SOQL without writing a loop iterating over the results?
in SQL: Select distinct name__c from CustomObject__c
in SOQL: ?
I wrote up a work around for this problem here:
http://d3developer.wordpress.com/2009/05/21/workaround-for-select-distinct-in-soql/
Hi. new to Apex. I tried your code and got an error on
{ uniqueCustomObjectSet.add(sl.lunchChoice__c);}
List<String> uniqueCustomObjectList = new List<String>(uniqueCustomObjectSet)
Do I have to define uniqueCustomObject Set ??? error says undefined
Thanks
Works Great!!! Thank you. Final question...if I wanted to sort the results, how would I code that?