webForumDet fria alternativet
Logga in / Bli medlem

Group by?

Databaser & SQL

5 svar · 380 visningar · startad av Skarre

Medlem sedan apr. 20012 427 inlägg
Trådstart#1

MySQL < 5

Hjärnsläpp! Jag har arbetsorder i tabellen "ord_workorders" och tillhörande rapporter i "ord_reports". En arbetsorder kan ha flera rapporter kopplade till sig, ord_workorders.id = ord_reports.workorderid.

Nu vill jag hämta alla arbetsorder vars samtliga rapporter är fakturerade (invoiced = 1), men jag har som sagt hjärnsläpp och behöver lite vägledning. Med nedan fråga får jag även med arbetsorder som bara har någon enstaka rapport fakturerad. Jag kan dessvärre inte köra subqueries eftersom mysql-versionen på servern inte fattar sådana.

SELECT * FROM ord_workorders o 
INNER JOIN ord_reports r ON o.id = r.workorderid
WHERE r.invoiced  = 1
GROUP BY o.id
ORDER BY r.reportdate DESC
Medlem sedan feb. 2000438 inlägg
#2

Funkar det bättre om du vänder på det: WHERE r.invoiced != 0 ?

Medlem sedan apr. 20012 427 inlägg
#3

Nope, det är något grundläggande fel i frågan, det ser jag själv, men jag så pass kass på sql att jag inte kan göra någonting åt det. :(

Medlem sedan dec. 200012 464 inlägg
#4
SELECT o.* 
 FROM ord_workorders o 
  left JOIN ord_reports r 
    ON o.id = r.workorderid
   and r.invoiced <> 1
 where r.workorderid is null
Medlem sedan apr. 20012 427 inlägg
#5

Tack ska du ha, Lars! Det uppskattas.

Medlem sedan apr. 20012 427 inlägg
#6

Jag har försökt modifiera frågan (utan framgång) eftersom den nu även hittar arbetsorder som inte har några rapporter. Det jag vill hämta är alla arbetsorder som har minst en rapport och vars samtliga rapporter är fakturerade.

RED: Ok, detta är vad jag fått fram.

SELECT o.*
FROM (ord_workorders o INNER JOIN ord_reports r1 ON o.id = r1.workorderid)
LEFT JOIN ord_reports r2 ON o.id = r2.workorderid AND r2.invoiced <> 1
WHERE r2.workorderid IS NULL
GROUP BY o.id

Jag joinade ord_reports med en "inner join" först, för att se till att det fanns rapporter kopplade till ordern, och sedan en gång till med Lars ursprungliga left join. Det vore dock kanon om någon kunde kolla på frågan och verifiera att det blivit rätt. Det verkar fungera, men som sql-novis blir man lite osäker ibland.

759 ms totalt · 4 externa anrop · v20260731065814-full.7fb52858
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
630 ms — ändringar (db)