webForumDet fria alternativet

DISTINCT från JOIN:ad tabell

1 svar · 366 visningar · startad av LR^evil.sid

LR^evil.sidMedlem sedan maj 2002560 inlägg
#1

MySQL 5.1

Vi sparar kunders adresser i en separat tabell. Skulle kunden ändra adress uppdateras inte raden utan vi lägger in en ny rad med det datum då adressen träder i kraft vilket betyder att en kund kan finnas fler än en gång i denna tabell.

Adresstabellen har förjande kolumner: id, kundid, datum, distrikt, adress, postnr, ort

Denna fråga ger "Dubletter" eftersom jag inte väljer ut DISTINCT ur adresstabellen.

SELECT DISTINCT 
             [23 kolumner]
        FROM abformer af
        INNER JOIN kundnummer knr ON af.abid = knr.abid
             AND (knr.bindningstid IS NULL
             OR (YEAR(knr.bindningstid) = YEAR(CURDATE()) AND MONTH(knr.bindningstid) <= MONTH(CURDATE())))
        INNER JOIN kunder k ON k.kundid = knr.kundid
             AND LCASE(k.namn) NOT REGEXP '^[ah]b$|^[ah]b[[:space:]]|^[ah]b[[:punct:]]|[[:space:]]+[ah]b([[[:punct:]][[:space:]]])?$'
             AND LCASE(k.efternamn) NOT REGEXP '^[ah]b$|^[ah]b[[:space:]]|^[ah]b[[:punct:]]|[[:space:]]+[ah]b([[[:punct:]][[:space:]]])?$'
        INNER JOIN adresser ad ON ad.kundid = knr.kundid
             AND NOT CONCAT(ad.adress,ad.postnr,ad.ort) IS NULL
             AND ad.distrikt = 1
        LEFT JOIN utskick u ON knr.entitet = u.entitet
            AND (YEAR(DATE_ADD(CURDATE(), INTERVAL -3 MONTH)) <= YEAR(u.datum)
            AND MONTH(DATE_ADD(CURDATE(), INTERVAL -3 MONTH)) <= MONTH(u.datum))
        WHERE NOT (af.grupp = 5 OR af.grupp = 11 OR af.grupp >= 18)
        ORDER BY ad.datum DESC;

Denna bit join:ar adresstabellen. Kan nån svara på hur jag kan slippa de extra raderna med kunder som har mer än en adress i adresstabellen?

INNER JOIN adresser ad ON ad.kundid = knr.kundid
        AND NOT CONCAT(ad.adress,ad.postnr,ad.ort) IS NULL
        AND ad.distrikt = 1
LarsGMedlem sedan dec. 200012 464 inlägg
#2

Ta bort distinct, lägg till följande villkor

and addresser.datum = 
   (select max(datum)
      from adresser
     where adresser.kundid = knr.kundid)
126 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)