webForumDet fria alternativet

Joina mot samma tabell

Databaser & SQLur Databashanterare & SQL

8 svar · 277 visningar · startad av erka

Medlem sedan dec. 19996 522 inlägg
Frågan#1

Jag har en tabell med följande

CupId
Fk_MaterialId
Vertikal
Parallell
FeedP17F

Det är inte jag som har byggt databasen så jag kan tyvärr inte ändra om den hur som helst. Vad jag vill få ut är följande

SELECT CupId,FkMaterialId,FeedP17F WHERE Vertikal = '1' AND CupId = X FROM TmpTble

men jag vill lägga till så att jag i samma fråga får med

(SELECT FeedP17F WHERE Parallell = '1' AND CupId = X)
AS FeedP17F_Parallell

Jag vill ha detta för att kunna loppa igenom alla som har vertikal = '1' Men i samma record även få ut dess värde där Parallell = '1', Det finns nämligen 2 uppsättningar av allt det jag vill ha ut, en med parallell = 1 och en med vertikal = 1. Jag har provat med cross join samt union men inte fått det att fungera bra. Kanske är jag bara trött ;) Tacksam för all hjälp. Det är väll en liten join mot sig själv jag vill göra.

Medlem sedan dec. 20003 887 inlägg
#2
SELECT CupId, FkMaterialId, FeedP17F, 'V'
FROM TmpTble
WHERE Vertikal = '1' AND CupId = X
UNION
SELECT CupId, FkMaterialId, FeedP17F, 'P'
FROM TmpTble
WHERE Parallell = '1' AND CupId = X

Så kanske?

Medlem sedan dec. 200012 464 inlägg
#3

vad menar du med samma record? För mig som har så svårt att visualisera saker så underlättar det väldigt mycket om du visar exempel på det resultat du vill ha.

Är det något liknande detta?

CupId ! FkMaterialId ! FeedP17F ! Vertikal ! Parallel
-------------------------------------------------------------
47__ ! 11________ ! Cola_____! Ja____ ! Nej
47__ ! 12________ ! Cola_____! Ja____ ! Ja
47__ ! 13________ ! Cola_____! Nej___ ! Ja

Medlem sedan mars 20034 471 inlägg
#4

Jag har säkert missförstått frågan, men varför funkar inte:

SELECT CupId, FkMaterialId, FeedP17F
FROM TmpTble
WHERE (Vertikal = '1' OR Parallell = '1') AND CupId = X;
Medlem sedan dec. 20003 887 inlägg
#5

Så var jag på väg att svara först, men så begrep jag inte vad erka var på jakt efter, så det blev en skum lösning istället. Skillnaden är ju den att det går inte att urskilja vad som motsvarar Vertikal och Parallell med din lösning.

Medlem sedan dec. 19996 522 inlägg
#6

Förlåt, den var lite luddigt skriven, var trött :(

Om jag skriver denna sqlfråga:

SELECT CupId,FkMaterialId,FeedP17F As FeedP174_Vertikal WHERE Vertikal = '1' AND CupId = X FROM TmpTble

Så får jag ut 3 kolumner i mina returnerade rader. Men om man kollar på datan som finns i databasen så finns det två rader med exakt samma CupId, den enda skillnaden är att på den ena är (förutom att de innehåller olika värden)

vertikal = 1
Parallell = NULL

och den andra med samma cupId har

Parallell = 1
vertikal = NULL

Jag vill ha 4 kolumner när jag får svaren returnerade, jag vill ha CupId,FkMaterialId,FeedP17F där vertikal = '1' men jag vill även ha FeedP17F (AS FeedP174_Parallell) där Parallell='1' och CupId är detsamma som det jag nyss fick ut.

Om vi säger att jag har 8 rader i min database, 4a uppsättningar med CupId så blir utdatat följande.

CupId ! MaterialId ! FeedP174_Vertikal ! FeedP174_Parallell
-----------------------------------------------------------------------------------
12__________3__________23.2______________24.7
13__________5__________25.2______________28.7
14__________7__________21.2______________36.7
15__________3__________20.2______________45.7

Alltså bara 4 returnerade rader fast det finns 8 rader i själva tabellen.

Klarare nu ?
tacksam

Medlem sedan dec. 20003 887 inlägg
#7

Jag förstår vad du vill göra, men jag vet inte om det går att göra en sådan fråga... jag får inte till det ivarjefall. Det säger väl inte så mycket dock ;)

Medlem sedan dec. 200012 464 inlägg
#8
select cupid,materialid, 
(select FeedP174 from tmpTble
 where cupid = t.cupid
     and materialid = t.materialid
     and vertikal = 1) as  FeedP174_Vertikal,
(select FeedP174 from tmpTble
 where cupid = t.cupid
     and materialid = t.materialid
     and parallell = 1) as  FeedP174_Parallell
from tmpTble t
group by  cupid,materialid
Medlem sedan dec. 19996 522 inlägg
#9

Men gud vad tänkte jag med, som vanligt :( Stort tack LarsG, du är en klippa men det vet du nog redan :)

127 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)