webForumDet fria alternativet
Logga in / Bli medlem

Invertera och sammaslå sql-frågor ;)

Databaser & SQL

4 svar · 333 visningar · startad av nill

Medlem sedan okt. 2001387 inlägg
Trådstart#1

Först har jag den här frågan:

SELECT oar.ID FROM oar INNER JOIN oar_users ON oar.ID = oar_users.vilkeno GROUP BY oar_users.vilkeno HAVING COUNT(oar_users.vilkeno) < 10

vars resultat ska föras ihop med en "inverterad version" (med nuvarande fråga får jag precis tvärtom de posterna jag vill ha), den här:

SELECT oar.ID FROM oar INNER JOIN oar_users ON oar.ID = oar_users.vilkeno GROUP BY oar.ID

Att sammanfoga dem skulle jag lite klumpigt kunna göra med temporary tables om det nu inte finnas något bättre sätt. Det jag inte ser någon lösning på är däremot "inverteringen". Har ingen aning om hur jag skulle kunna göra en fråga som får ett inverterat resultat. Så hjälp med andra ord.. :)

Medlem sedan dec. 200012 464 inlägg
#2

Det är enklare (i alla fall för mig) om du beskriver vilka tabeller du har, ger exempel på datainnehåll och vilket resultat du förväntar dig.

Din första fråga är egentligen ogiltig då du inte gör group by på id.

Medlem sedan okt. 2001387 inlägg
#3

den fungerar ivarjefall :)

tabell oar (lagrar öar)
ID |

tabell oar_users (lagrar vilka öar som tillhör vilka users)
ID | vilkeno

Vad jag vill göra är att få ut de öar som har mindre än 10 users på sig samt de med inga users alls på sig som resultat.

Medlem sedan dec. 200012 464 inlägg
#4
SELECT oar.ID 
FROM oar left JOIN oar_users 
ON oar.ID = oar_users.vilkeno 
GROUP BY oar.id
HAVING COUNT(*) < 10
Medlem sedan okt. 2001387 inlägg
#5

*skäms*
Det var ju pinsamt lätt. Kanske har något med att göra att jag inte sovit på 35 h...
Tack så mycket

266 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)