Having и проверка дублей

Для проверки дублей в Terrasoft CRM используется запрос вида

SELECT
        "tbl_Contact1"."Name" "Name",
        "tbl_Contact1"."Communication1" "Communication1",
        COUNT("tbl_Contact1"."ID") "Duplicates"
FROM
        "tbl_Contact" "tbl_Contact1"
WHERE (
        (SELECT
                COUNT("tbl_Contact2"."ID") "Duplicates"
        FROM
                "tbl_Contact" "tbl_Contact2"
        WHERE (UPPER("tbl_Contact1"."Name") = UPPER("tbl_Contact2"."Name") AND
                UPPER("tbl_Contact1"."Communication1") = UPPER("tbl_Contact2"."Communication1"))) >= 2 AND
        NOT UPPER("tbl_Contact1"."Name") IS NULL AND
        NOT UPPER("tbl_Contact1"."Communication1") IS NULL)
GROUP BY
        "tbl_Contact1"."Name",
        "tbl_Contact1"."Communication1"
ORDER BY
        3 DESC,
        1 ASC,
        2 ASC

Однако, если необходимо найти также записи в которых одно из полей может быть NULL, в нашем случае, например, Средство связи 1, такой запрос эти записи не найдет.
Для этого лучше пользоваться запросом с HAVING
SELECT
        "tbl_Contact1"."Name" "Name",
        "tbl_Contact1"."Communication1" "Communication1",
        COUNT(*) "Duplicates"
FROM
        "tbl_Contact" "tbl_Contact1"
GROUP BY
        "tbl_Contact1"."Name",
        "tbl_Contact1"."Communication1"
HAVING COUNT(*) >=2
ORDER BY
        3 DESC,
        1 ASC,
        2 AS

Кроме того, что этот запрос выглядит значительно элегантнее, по моим оценкам на MS SQL Server он еще и выполняется значительно быстрее. На Oracle время выполнения примерно одинаковое.

Нравится

Поделиться

4 комментария

HAVING это, конечно, хорошо, а как поизящнее реализовать такой запрос в TS CRM?

Дима, ты как всегда прав. Добавил по этому поводу идею http://community.terrasoft.ua/ideas/4465

Эх, опоздал :) Алексей опередил. Хотя идея с HAVING в запросе витала в воздухе несколько лет, и решалась путем использования самодельных хранимых процедур.

"Гамора Дмитрий" написал:Эх, опоздал :)

Кто рано встает ....
"Гамора Дмитрий" написал:Хотя идея с HAVING в запросе витала в воздухе несколько лет

почему же тогда до сих пор не реализовали???

Показать все комментарии