select epostAdress
from anmälda
where not exists (
select *
from svarande
where anmälda.epostadress = svarande.epostadress)
Flyttas från ASP
7 svar · 323 visningar · startad av Davida
Jag har gjort ett frågeformulär där de som har anmält sig ska svara på frågor. Nu har jag 1000 anmälda och 408 svarande, jag vill skicka ett mail till de som inte har svarat. Hur gör jag för att plocka ut epostadresserna till de som inte har svarat?
TABELL: Anmälda
============
epostadress
TABELL: Svarande:
==============
epostadress
select epostAdress
from anmälda
where not exists (
select *
from svarande
where anmälda.epostadress = svarande.epostadress)
Flyttas från ASP
Vad är skillnaden mellan LarsGs och denna?
SELECT epostadress FROM anmälda WHERE NOT epostadress IN (SELECT epostadress FROM svarande)
Med en äldre verson av mySql så kan du göra så här:
SELECT distinct a.epostadress FROM anmälda a
LEFT JOIN svarande s ON s.epostadress=a.epostadress
WHERE s.epostadress IS NULL
Engine^ : Aha. :)
Jag brukar ibland fråga om en sql-fråga är "rätt".
Då brukar svaret bli:
Är resultatet det du förväntade dig?
-> Ja
Då är det rätt.
Men eftersom att det uppenbarligen i många fall går att få fram samma resultat med fler olika frågor så måste det ju uppenbarligen finnas bättre och sämre frågor.
Bara en tanke. :)
Engine^ skrev:
LarsG är snabbare.
EXISTS avbryter så fort den hittar en post som uppfyller villkoret.
Visserligen, men även om den avbryter sökningen så fort den hittar en adress så måste den ändå göra en sökning för varenda post i tabellen.
Varanten med IN skapar en mängd av adresser som den söker i. Vad som är effektivast av de två är inte så lätt att säga.
Varianten med JOIN tror jag är den effektivaste. Den gör ett resultat genom att matcha ihop tabellerna och filtrerar det med ett enkelt villkor. Helt vanliga databasoperationer, och därför troligast det som databasen är bäst optimerad för.
Om två frågor är ekvivalenta så kan man inte säga att den ena är effektivare på grund av att den kan utföras på ett visst sätt. SQL är ett deklarativt språk.