Hej! Jag undrar om det är möjligt att köra en "join top"? Spontan tanke: Tror inte att det går att lösa med en fråga utan att använda subselect. En annan lösning är att joina in en "tabell" med lägsta sortorder för varje produkt, men även det kräver en subselect. <b>>En annan lösning är att joina in en "tabell" med lägsta sortorder för varje produkt, men även det kräver en subselect.</b> Jo, den fungerar (förutsätter jag), men jag skrev att om man bara ska använda EN fråga så krävs en subselect (om man inte kör Access och kan använda FIRST). Om man slår ihop den? Ja, men då har du inte bara en utan 2 subqueries (eller inte subqueries, men en select som frågan bygger på (vad kan det tänkas heta?). Min erfarenhet är att det inte är någon höjdare för prestandan heller, åtminstone inte i MySQL). Det borde gå att trolla bort en såhär (men man "förlorar" en join istället): Jaja, okej. Med subqueries menar jag SELECT A, (SELECT X...) etc.join top?
Jag har:
Product
--------
productguid
name
ProductCategory
------------------
productcategoryguid
name
headerimage
ProductCategoryProductLink
-------------------------------
productcategoryguid
productguid
sortorder
En produkt kan således ingå i flera kategorier och det går att sortera på vilken kategori som ska komma först om produkten ingår i flera kategorier.
När jag väljer ut en produkt vill jag köra en join med productcategory så att jag får med fältet headerimage. Detta är inga problem om produkten endast ingår i en kategori men om den ingår i två kategorier finns det ju två kategorier som matchar produkten.
I detta fall vill jag få med headerimage för den kategori med lägst sortorder.
Kan man göra detta på ett bra sätt? Att köra en subquery i stil med:
select p.*, (select top pc.headerimage from productcategory pc join productcategoryproductlink on pcpl.productcategoryguid = pc.productcategoryguid where pcpl.productguid= p.productguid order by sortorder) as headerimage from product p join where p.productguid = 'xxx'
funkar väl, men känns sådär...
/mvh
StefanSv: join top?
1.Välj ut lägsta sortorder (behövs inte om du vet att det alltid är 1)
X = SELECT productguid, MIN(sortorder) AS sortorder FROM ProductCategoryProductLink GROUP BY productguid
2. Välj ut kategori som motsvarar:
Y = SELECT productcategoryguid, productguid FROM ProductCategoryProductLink LEFT JOIN X on productguid, sortorder
3. Hämta ut image från Y.
SELECT Y.productguid, ProductCategory.headerimage FROM Y LEFT JOIN ProductCategory ON productcategoryguid
SQL-koden inte helt korrekt, men du fattar nog principen.Sv: join top?
Möjligtvis kan du lösa det om din databas har en FIRST-aggregatfunktion, den enda som har det som jag känner till är Access.
/JohanSv:join top?
Funkar inte min?Sv: join top?
/JohanSv:join top?
SELECT Y.productguid, ProductCategory.headerimage FROM
(SELECT productcategoryguid, productguid FROM ProductCategoryProductLink LEFT JOIN
(SELECT productguid, MIN(sortorder) AS sortorder FROM ProductCategoryProductLink GROUP BY productguid)
on productguid, sortorder) AS Y
LEFT JOIN ProductCategory ON productcategoryguid Sv: join top?
SELECT Product.productguid, ProductCategory.headerimage FROM
Product LEFT JOIN
(SELECT productguid, MIN(sortorder) AS sortorder FROM ProductCategoryProductLink GROUP BY productguid) AS X ON Product.productguid = X.productguid
LEFT JOIN ProductCategoryProductLink ON Product.productguid = ProductCategoryProductLink.productguid AND X.sortorder = ProductCategoryProductLink.sortorder
LEFT JOIN ProductCategory ON ProductCategoryProductLink.productcategoryguid = ProductCategory.productcategoryguid
Nu börjar det bli smått rörigt att läsa... Är inte 100 på vilken lösning som är bäst, denna eller din, det är nog bara att testa som gäller...
Men bättre än så tror jag inte det går att få till det.
/JohanSv:join top?
Att göra frågorna separat och joina dem är väl betydligt snabbare än subqueries?