webForumDet fria alternativet

Presentera resultat som EJ fick träff

Databaser & SQL

4 svar · 369 visningar · startad av klockren

Medlem sedan sep. 200151 inlägg
Frågan#1

Säg att jag har två tabeller, en med personer och en med städer.

Ex:
Tabell1 har kolumnerna PersonId och Namn med värden som 1 - Bengt, 2 - Göran, 3 - Abdullah, 4 - Ann-Kristin etc

Tabell2 har kolumnerna PersonId och stad, 1 - Borås, 1 - Allingsås, 2 - Mjölby, 2 - Finspång, 2 - Mora, 3 - Umeå, 3 - Borås osv. osv.

PROBLEM
Hur skriver jag en fråga som listar alla personer som INTE varit i Borås (inklusive de som inte varit någonstans)?

Gör jag en

SELECT Tabell1.namn
FROM Tabell1, Tabell2
WHERE Tabell1.PersonId = Tabell2.PersonId(+)
AND (Tabell2.Stad <> 'Borås' OR Tabell2.Stad IS NULL)
ORDER BY 1

så kommer de som varit i Borås OCH andra städer att visas, bara de som ENDAST varit i Borås faller bort. Hjälp!

Medlem sedan juni 20008 205 inlägg
#2

Typ

SELECT Tabell1.namn
FROM Tabell1
LEFT JOIN Tabell2 ON Tabell1.PersonId = Tabell2.PersonId
WHERE Tabell2.Stad = 'Borås'
GROUP BY Tabell1.Namn
HAVING COUNT(Tabell2.Stad) = 0
ORDER BY tabell1.namn
Medlem sedan sep. 200151 inlägg
#3

Tack spango,

dock returnerar koden alltid 0 träffar eftersom den först söker ut de som varit i Borås (person 2 som varit i Mjölby, Finspång och Mora kommer inte med vilket de ska):

WHERE Tabell2.Stad = 'Borås'

och sedan utesluter dem:

GROUP BY Tabell1.Namn
HAVING COUNT(Tabell2.Stad) = 0
Medlem sedan dec. 20025 483 inlägg
#4
select t1.namn
  from tabell t1
 where t1.personid
not in ( select personid
           from tabell2
          where namn = 'Borås' )
Medlem sedan juni 20008 205 inlägg
#5

red. Jag är ju helt slut.

258 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)