← Back to team overview

sslug-teknik team mailing list archive

Re: MySQL Bråkar

 

Joachim Bondo wrote:
Niklas Håkansson <niklas@xxxxxxxxxxxxx> wrote:

Joachim Bondo wrote:

Hvad er det helt præcis du vil? Jeg kan ikke gennemskue det, og det kan
MySQL heller ikke. Du beder MySQL om at vise alle de datoer i tmp, der

er

større end datoerne i webstat. Men hvilke datoer? Dem alle tilsammen?

Den

største? Eller?

De webstats.datum som är större är de i tmp.testdatum.


Større end HVILKE? Større end den STØRSTE dato? Større end ALLE datoer?

Du har helt rätt det finns ingen mening att köra den datum frågan som jag försökte. Jag tycker dock att mysql skull svara mig med empty set.

Det jag egentligen försöker göra är att uppdatera tabellen webstats med data från tmp. Det kan dock förekomma dubletter i tmp så därför måste jag köra en fråga som endast sätter i data som inte finns i webstats. Jag kan inte jämföra på datum då viss ny data kan trilla in i tmp med lägre datum än det som redan finns i webstats. Således vill jag göra en INSERT med all data från tmp som inte redan finns i webstats. Följande SELECT ger: (Ge mig alla datum i tmp som inte finns i webstats).

select tmp.testdatum from tmp, webstats where tmp.testdaum != webstats.datum;
ERROR 2013 (HY000): Lost connection to MySQL server during query

Vilket jag tycker borde ge empty set. Denna frågan ska i slutändan innehålla minst 2 where satser.

(Ge mig alla datum i tmp som inte finns i webstats där kod inte är lika med kod och reg inte är lika med reg)

select testdatum from tmp, webstats where tmp.testdatum != webstats.testdatum and tmp.kod != webstats.kod and tmp.reg != webstats.reg.

Borde väl fungera?



For at gøre forvirringen endnu større, byttede jeg i mit svar om på større
og mindre, eller om du trækker data ud fra tmp eller webstats (men det
ændrer ikke ved den grundlæggende udfordring :-). Ud fra din SQL kan jeg se,
at du vil trække datoer ud fra tmp, der er MINDRE end dato(en|erne) fra
webstats. Du må stadig præcisere: Mindre end HVILKE datoer i webstats...

1) Hvis det er mindre end SAMTLIGE datoer i webstats, kan du skrive:

  select testdatum
  from tmp, webstats
  where tmp.testdatum < SELECT MIN(datum) FROM webstats

Du behøver ikke teste mod samtlige datoer, su kan nøjes med at teste på den
mindste. Desværre kan MySQL stadig ikke håndtere subselects (jeg er ikke
sikker på om version 4.1 har fået det eller ej). I så fald må du først
trække den mindste dato ud fra webstats i en separat select og dernæst
komponere din select som ovenstående med mindsteværdien.

2) Hvis det er mindre end bare ÉN dato i webstats, gør du det samme, men med
MAX(datum) i stedet.

3) Hvis det er mindre end NOGLE datoer i webstats, må du specificere hvilke,
der er tale om. Eller rettere; HVILKEN. Hvis dato1 er mindre end dato2, og
dato3 er større end dato2, så er dato1 også mindre end dato3, så du behøver
kun én værdi. Husk på, at MySQL må sammenholde datoen i hver række i tmp med
én værdi.

Jeg håber jeg har gjort mig nogenlunde forståelig her.



Det jag slutligen vill uppnå är en uppdatering av typen:

INSERT INTO webstats (fält1, osv) SELECT tmp.fält1, tmp.osv from tmp,
webstat where tmp.testdatum < webstats.datum.

Isåfall får det bli

and webstats.id!=tmp.id (vet inte om det är effektivt).


Er der en sammenhæng mellem tmp og webstats? Hvilken? Hvordan ser de 2
tabeller ud? (DESCRIBE tmp; DESCRIBE tmp;)

Joachim












References