Vinnaren i pepparkakshustävlingen!
2012-02-15, 15:20
  #1
Medlem
Var bra länge sedan jag höll på med detta men jag vet att detta inte är en korrekt omskrivning. Garanterat några saker jag har missat.. Hur som haver om någon har koll på detta på rak arm så hjälp gärna till.


SELECT a_patientkey, COUNT(b_drugkey) AS antal
FROM tabela, tabelb
WHERE b_patientkey = a_patientkey
GROUP BY a_patientkey
UNION
SELECT a_patientkey, 0 AS antal
FROM tabel1
WHERE a_patientkey NOT IN
(SELECT b_patientkey
FROM tabelb)

Denna skall alltså skrivas om med en left join istället för UNION. Var några år sedan och kan inte minnas att jag någonsin gjort något liknande? Jag gav det ett försök iaf trots att det var länge sedan men kom inte direkt någon vart än detta, vilket ser helt befängt ut.

SELECT a_patientkey, 0 AS antal, COUNT(b_drugkey) as antal
FROM tabela, tabelb
LEFT JOIN b_patientkey = a_patientkey
WHERE a_patientkey NOT IN (SELECT b_patientkey FROM tabelb)
GROUP BY a_patientkey

Något tips för att friska upp mitt minne? Google gav inte speciellt mycket inom detta just..
Citera
2012-02-15, 18:23
  #2
Medlem
dethalvabarnets avatar
kan du visa relationen mellan tabellerna och exempel på resultat som du vill ha med kolumner och värden?
Citera
2012-02-16, 13:23
  #3
Medlem
Vill egentligen inte få ut någonting, utan tabellerna är påhittade så det spelar ingen roll vad som kommer ut så länge det är en korrekt omskrivning från union lösningen till en left join lösning. Det som kan vara intressant är väl kanske att left join lösningen bör fungera bättre med ett sekundärt index baserat på b_patientkey och b_drugkey i TABELB, än tvärtom(dvs b_drugkey först). Ursäkta om jag låter smått efterbliven men det var något år sedan jag höll på med detta men kommer eventuellt att stöta på liknande saker igen, så är inte helt inne i matchen på vissa punkter.
Citera
2012-02-16, 15:58
  #4
Medlem
Lite knepigt ställd fråga, men fungerar det här? Och om inte, vad är fel?

Kod:
SELECT
    a
.patientkey
    
,COUNT(b.drugkey)
FROM
    tablea a
        LEFT JOIN table1 e
            ON a
.patientkey=e.patientkey
        LEFT JOIN tableb b
            ON a
.patientkey=b.patientkey 
GROUP BY
    a
.patientkey 
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback