Gå til innhold

Alternativ til subselect i MySQL 4.0.18


Anbefalte innlegg

Hei!

 

Jeg har en tabell som inneholder en hel haug med verdier i tillegg til et statusfelt. En record fra tabellen ser veldig forenklet ut ca sånn:

<felt1><felt2><felt3><felt4><status><datetime>

Status er et tall mellom 0 og 9.

Problemet er at jeg ønsker å plukke ut alle recorder med status 0, men samtidig passe på at den samme recorden ikke ligger inne i databasen med en annen status. Ettersom <felt1> er primærnøkkel er denne alltid unik, mens verdiene i de andre feltene i en del tilfeller er identiske (bortsett fra status og datetime).

 

Jeg hadde i utgangspunktet tenkt å bruke en subselect hvor jeg plukker ut recorder hvor den samme recorden ikke ligger inne med status != 0, men dette er tydeligivs ikke støttet før enn i MySQL 4.1.x Databasen jeg bruker kjører versjon 4.0.18

 

Alle forslag mottas med takk :)

Lenke til kommentar
Videoannonse
Annonse

Under finner du testscenario som fungerer i SQL Server og gjør det du ønsker, med join:

 

use tempdb;
go

create table Test (
 id int identity,
 verdi1 int,
 verdi2 int,
 status int
);
go

insert into test values (1,2,1);
insert into test values (2,3,1);
insert into test values (3,4,2);
insert into test values (3,4,4);
insert into test values (1,2,0);
go

select t1.*
from test t1 left outer join test t2
 on (t1.verdi1 = t2.verdi1) 
   and (t1.verdi2 = t2.verdi2) 
   and (t2.status = 0)
where t2.status is null;

 

Underspørringer kan ofte skrives om til joins, og som oftest har dette positiv innvirking på ytelsen.

Endret av roac
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...