Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


join top?

Postades av 2009-06-16 08:28:55 - Stefan Johansson, i forum databaser, Tråden har 8 Kommentarer och lästs av 4608 personer

Hej! Jag undrar om det är möjligt att köra en "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
Stefan


Svara

Sv: join top?

Postades av 2009-06-16 08:57:47 - Niklas Jansson

Spontan tanke:

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.


Svara

Sv: join top?

Postades av 2009-06-16 09:57:31 - Johan Djupmarker

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.

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.

/Johan


Svara

Sv:join top?

Postades av 2009-06-16 10:41:06 - Niklas Jansson

<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>
Funkar inte min?


Svara

Sv: join top?

Postades av 2009-06-16 12:03:48 - Johan Djupmarker

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).

/Johan


Svara

Sv:join top?

Postades av 2009-06-16 13:12:52 - Niklas Jansson

Om man slår ihop den?

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


Svara

Sv: join top?

Postades av 2009-06-16 13:57:57 - Johan Djupmarker

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):


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.

/Johan


Svara

Sv:join top?

Postades av 2009-06-16 22:15:02 - Niklas Jansson

Jaja, okej. Med subqueries menar jag SELECT A, (SELECT X...) etc.

Att göra frågorna separat och joina dem är väl betydligt snabbare än subqueries?


Svara

Sv: join top?

Postades av 2009-06-16 23:38:37 - Håkan Borneland

Ja, generellt sett.


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 572
27 958
271 741
5 981
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies