Как я могу изменить SQL, чтобы избежать DISTINCT и 2 полей в ГДЕ? - PullRequest
1 голос
/ 17 марта 2020

вот мой SQL, я хочу избавиться от ГДЕ (ADDRESS_KEY, PRIO). Как я могу сказать это с JOIN?

SELECT DISTINCT ADDRESS_KEY, ADDRESS_LINE_1, ADDRESS_LINE_2, ADDRESS_LINE_3, CITY, COUNTRY_CD, IS_TO_BE_DELETED, STREET, ROW_UPDATE_DATE
FROM V_CUSTACCHOLD
WHERE (ADDRESS_KEY, PRIO) IN (SELECT DISTINCT ADDRESS_KEY, MIN(PRIO) FROM V_CUSTACCHOLD GROUP BY ADDRESS_KEY)

Большое спасибо заранее.

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Вы можете присоединить таблицу к запросу, который вы используете в предложении WHERE:

SELECT DISTINCT ADDRESS_KEY, ADDRESS_LINE_1, ADDRESS_LINE_2, ADDRESS_LINE_3, CITY, COUNTRY_CD, IS_TO_BE_DELETED, STREET, ROW_UPDATE_DATE
FROM V_CUSTACCHOLD v1 
INNER JOIN (SELECT ADDRESS_KEY, MIN(PRIO) PRIO FROM V_CUSTACCHOLD GROUP BY ADDRESS_KEY) v2
ON v2.ADDRESS_KEY = v1.ADDRESS_KEY AND v2.PRIO = v1.PRIO

Вы можете удалить DISTINCT из SELECT в зависимости от результатов.

0 голосов
/ 17 марта 2020

У вас есть вид, поэтому я бы порекомендовал оконные функции:

SELECT CA.*
FROM (SELECT CA.*,
             ROW_NUMBER() OVER (PARTITION BY ADDRESS_KEY ORDER BY PRIO ASC) AS SEQNUM
      FROM V_CUSTACCHOLD CA
     ) CA
WHERE SEQNUM = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...