Diskuze: Podobné názvy hodnot v tabulce
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Tohle jednoduše asi nepůjde. Nemáš v té tabulce ještě nějaké záznamy, jako třeba IČO apod., podle kterých by se daly ty podobnosti najít?
Právě že jednoznačný identifikátor v tabulce je jen id. Dále jsou tam
pouze pomocné záznamy jako: kdo účet vytvořil, datum vytvoření účtu,
ulice, ... Ale všechno to jsou nepovinné parametry, takže např. kontrolovat
podle ulice by to šlo, ale obávám se, že mi z toho nevyplavou všechny
záznamy.
IČO je v jiné tabulce (tu jsem také kvůli duplicitám IČO procházel),
problém je, že to byl opět nepovinný údaj, takže spousta účtů IČO
nemá.
Mám obavy, že ti nezbyde nic jiného, než to seřadit podle názvu firmy a projít ručně...
Do toho se mi právě nechtělo
Ale asi nic jiného nakonec nezbude.
Stejně díky
A co třeba takto:
SELECT
empl.id,
(
SELECT
dupl.id
FROM empl as dupl
WHERE
dupl.nazev LIKE LEFT(empl.nazev, 3) + '%' AND
dupl.id <> empl.id
FOR XML RAW ('dupliciCompanyId'), ROOT('companies'), ELEMENTS
) AS duplicitniIDs
FROM
empl
vhodnou úpravou sekce
dupl.nazev LIKE LEFT(empl.nazev, 3) + '%'
lze pokrýt odhadem tak 97% duplicit, případně si nad sloupcem s názvem
zapni fulttext, pokud to ta DB umí a nech si vyhledat shody ke všem
záznamům.
Zbytek brigádník, ale za podstatně kratší čas.
Hale paráda, moc děkuju, určitě vyzkoušim.
Brigádníka nemám, takže ho budu muset suplovat já sám.
Ale pohoda, určitě to hodně pomůže.
Ještě jednou díky
V tomto případě je problém ten, že nevím jestli že DB umí to:
FOR XML RAW ('dupliciCompanyId'), ROOT('companies'), ELEMENTS. (hazí mi to
chybu viz obrázek)
A když to zakomentuju, tak hláší, že subselect vrací víc jak jednu
hodnotu.
To je pravděpodobné, že vrací více hodnot. Sample je pro MSSQL, který vrací XML, zkus si pro svoji DB najit něco jako "convert multiple columns to one column", abysi měl hodnoty v jedné buňce oddělěné třeba středníkem.
Napiš si funkci, která má jako vstup sloupec 'name'. Funkce normalizuje název firmy, tj.
Select z tabulky potom zgrupuješ podle výstupu této funkce a vyhodnotíš duplicity pomocí HAVING COUNT(*) > 1
Zobrazeno 11 zpráv z 11.