DISTINCT vám nepomůže, pokud mají řádky jiné sloupce. Je zřejmé, že jedna z tabulek, ke které se připojujete, má více řádků pro jeden řádek v jiné tabulce. Chcete-li získat jeden řádek zpět, musíte odstranit další více řádků v tabulce, ke které se připojujete.
Nejjednodušší způsob, jak toho dosáhnout, je vylepšit omezení klauzule where nebo JOIN tak, aby se připojilo pouze k jedinému záznamu, který byste chtěli. Obvykle to vyžaduje stanovení pravidla, které vždy vybere 'správný' záznam z druhé tabulky.
Předpokládejme, že máte jednoduchý problém, jako je tento:
Person: Jane
Pets: Cat, Dog
Pokud zde vytvoříte jednoduché spojení, obdržíte dva záznamy pro Jane:
Jane|Cat
Jane|Dog
To je zcela správné, pokud je vaším cílem vyjmenovat všechny kombinace lidí a domácích zvířat. Pokud však váš pohled měl místo toho uvádět seznam lidí s domácími mazlíčky nebo seznam lidí a zobrazovat jednoho z jejich mazlíčků, narazili jste na problém, který nyní máte. K tomu potřebujete pravidlo.
SELECT Person.Name, Pets.Name
FROM Person
LEFT JOIN Pets pets1 ON pets1.PersonID = Person.ID
WHERE 0 = (SELECT COUNT(pets2.ID)
FROM Pets pets2
WHERE pets2.PersonID = pets1.PersonID
AND pets2.ID < pets1.ID);
Co to udělá, je aplikovat pravidlo, které omezí záznam Pets ve spojení na mazlíčka s nejnižším ID (první v tabulce Pets). Klauzule WHERE v podstatě říká „kde nejsou žádná domácí zvířata patřící stejné osobě s nižší hodnotou ID).
Výsledkem by byl jeden záznam:
Jane|Cat
Pravidlo, které budete muset použít na svůj výběr, bude záviset na datech ve sloupcích, které máte, a na tom, které z „více“ záznamů by se měly ve sloupci zobrazit. To však skončí skrytím některých dat, což nemusí být to, co chcete. Například výše uvedené pravidlo skrývá skutečnost, že Jane má psa. Vypadá to, jako by Jane měla pouze kočku, i když to není správné.
Pokud začínáte filtrovat platná data, možná budete muset přehodnotit obsah svého pohledu a toho, čeho se svým pohledem snažíte dosáhnout.