MySQL Distinct question

I have a question about the "distinct" syntax.

In this example:
Select distinct pID, name, address, phone, email from table;

Open in new window


I only want the distinct pID.

In this query, would my results show distinct values for pID, name, address, phone, and email or JUST pID?
lvollmerAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

lluddenCommented:
That query will show all of the distinct rows between all values listed.

If you want to just see the unique PID, you need to just have the columns that you want to be distinct in the select.  If you need to join it back to the source table, you can make it a derived table and join it.
0
lvollmerAuthor Commented:
Here is my real life query:
SELECT
    pd.person_id, pd.first,pd.email,sod.option_text
FROM
    pd
INNER JOIN
    srf ON pd.person_key = srf.person_key
INNER JOIN
    ON srf.survey_option_key =  sod.survey_option_key
WHERE
    srf.survey_option_key IN (297,298,299)
AND
    srf.survey_question_key = '43'
AND
    pd.is_subscriber ='1'
ORDER BY
    pd.person_id ASC

Open in new window


This works fine, except that it returns rows multiple times for pd.person_id. I am not sure how to apply what you suggested to make sure ONLY pd.person_id is distinct. Any idea?
0
lluddenCommented:
This will do an inner join to just the distinct ID list so they only display once.
SELECT
    pd.person_id, pd.first,pd.email,sod.option_text
FROM
    pd
INNER JOIN
    srf ON pd.person_key = srf.person_key
INNER JOIN
    ON srf.survey_option_key =  sod.survey_option_key
INNER JOIN (SELECT DISTINCT Person_id FROM PD) PDList ON pd.Person_ID = PDList.Person_id
WHERE
    srf.survey_option_key IN (297,298,299)
AND
    srf.survey_question_key = '43'
AND
    pd.is_subscriber ='1'
ORDER BY
    pd.person_id ASC

Open in new window

0
The Ultimate Tool Kit for Technolgy Solution Provi

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy for valuable how-to assets including sample agreements, checklists, flowcharts, and more!

lvollmerAuthor Commented:
thanks - it is running, so i will report back when finished.
0
MurpheyApplication ConsultantCommented:
Hi lvollmer,

Isn't this enough:

Select  pID, name, address, phone, email from table group by pID, name, address, phone, email
0
lvollmerAuthor Commented:
Murphey - woudln't that still show multiple rows for one pID?
0
MurpheyApplication ConsultantCommented:
Assuming that pID = PersonalID
and looking to your select, the combination pID and name  etc will be unique,

If not, it makes no sence to select an pID with a name that (maybe) not belongs to that pID or
is one of many that belongs to that pID.

So if pID is connected to one person, the answer is NO

if a pID is connected to more then one person, the answer is Yes, but is that out put still reliable?
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
lvollmerAuthor Commented:
I will run it now and test.

In the real query I am running (see second query) the result set will return multiple rows for pd.person_id if they have values for this:

WHERE
    srf.survey_option_key IN (297,298,299)
0
lvollmerAuthor Commented:
this worked, thank you. I guess I did not understand how GROUP BY worked, and it is perfect for this instance.
0
MurpheyApplication ConsultantCommented:
GROUP BY wil select each record that has a unique group by,
if your tabel contains 2 rows with the same pID for 1 person with 2 adresses, the line is shown twice
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
MySQL Server

From novice to tech pro — start learning today.