Home > Net >  Find the distinct with different string values from SQL select
Find the distinct with different string values from SQL select

Time:01-28

I want to remove the duplicate rows Using Select Query how can I get rid of the duplicate rows.

The following out put produces redundant records, How to get the distinct results?

SELECT E.EMAIL_ID, T.FIRST_NAME, T.LAST_NAME, CY.COUNTRY_ID 
FROM PLAYER P
INNER JOIN PLAYERTYPE T ON P.PLAYER_ID = T.PLAYER_ID
INNER JOIN PLAYER_CONTACT C ON T.PLAYER_ID = C.PLAYER_ID 
INNER JOIN CONTACT_EMAIL E ON E.CONTACT_ID = C.CONTACT_ID
INNER JOIN COUNTRY_TABLE CY ON P.COUNTRY_ID = CY.COUNTRY_ID
WHERE CY.COUNTRY_CODE='AUS'
AND T.PLAYER_TYPE IN ('NEW', 'EXE')

Current Output:

FIRST_NAME LAST_NAME EMAIL_ID COUNTRY_ID
MARK CLARKSON [email protected] 04
MARK CLARKSON [email protected] 04
CATH SPEARS [email protected] 04
FESS LOPEZ [email protected] 04
FEXS LOPEZ [email protected] 04
FEXS LOPEZ [email protected] 04
EOVA SMITH [email protected] 04

Expected Output:

FIRST_NAME LAST_NAME EMAIL_ID COUNTRY_ID
MARK CLARKSON [email protected] 04
CATH SPEARS [email protected] 04
FESS LOPEZ [email protected] 04
FEXS LOPEZ [email protected] 04
EOVA SMITH [email protected] 04

Tried

SELECT DISTINCT E.EMAIL_ID, T.FIRST_NAME, T.LAST_NAME, CY.COUNTRY_ID 
FROM PLAYER P
INNER JOIN PLAYERTYPE T ON P.PLAYER_ID = T.PLAYER_ID
INNER JOIN PLAYER_CONTACT C ON T.PLAYER_ID = C.PLAYER_ID 
INNER JOIN CONTACT_EMAIL E ON E.CONTACT_ID = C.CONTACT_ID
INNER JOIN COUNTRY_TABLE CY ON P.COUNTRY_ID = CY.COUNTRY_ID
WHERE CY.COUNTRY_CODE='AUS'
 AND T.PLAYER_TYPE IN ('NEW', 'EXE')

SELECT T.FIRST_NAME, T.LAST_NAME, E.EMAIL_ID, CY.COUNTRY_ID 
FROM PLAYER P
INNER JOIN PLAYERTYPE T ON P.PLAYER_ID = T.PLAYER_ID
INNER JOIN PLAYER_CONTACT C ON T.PLAYER_ID = C.PLAYER_ID 
INNER JOIN CONTACT_EMAIL E ON E.CONTACT_ID = C.CONTACT_ID
INNER JOIN COUNTRY_TABLE CY ON P.COUNTRY_ID = CY.COUNTRY_ID
WHERE CY.COUNTRY_CODE='AUS'
AND T.PLAYER_TYPE IN ('NEW', 'EXE')
GROUP BY T.FIRST_NAME, T.LAST_NAME, E.EMAIL_ID, CY.COUNTRY_ID 

Here is the fiddle.

CodePudding user response:

Try using DISTINCT LOWER:

SELECT DISTINCT T.FIRST_NAME, 
                T.LAST_NAME, 
                LOWER(E.EMAIL_ID) AS EMAIL_ID, 
                CY.COUNTRY_ID 
FROM PLAYER P
INNER JOIN PLAYERTYPE T ON P.PLAYER_ID = T.PLAYER_ID
INNER JOIN PLAYER_CONTACT C ON T.PLAYER_ID = C.PLAYER_ID 
INNER JOIN CONTACT_EMAIL E ON E.CONTACT_ID = C.CONTACT_ID
INNER JOIN COUNTRY_TABLE CY ON P.COUNTRY_ID = CY.COUNTRY_ID
WHERE CY.COUNTRY_CODE='AUS' AND T.PLAYER_TYPE IN ('NEW', 'EXE')

Output:

FIRST_NAME LAST_NAME EMAIL_ID COUNTRY_ID
MARK CLARKSON [email protected] 04
CATH SPEARS [email protected] 04
FESS LOPEZ [email protected] 04
FEXS LOPEZ [email protected] 04
EOVA SMITH [email protected] 04

Check the demo here.

CodePudding user response:

The repeated errors seem to have different email addresses, or the same email address with different cases. Try removing the email column or simply applying a Lowercase() to the email (or whatever the equivalent is for it in your db engine)

  • Related