Citat:
Ursprungligen postat av Tjusifer
Reglerna för att konvertera operatorerna till varandra stämmer nog fast jag är inte helt övertygad om de är rätt applicerade på hela satsen. Det låter logiskt fel (i mina öron) att översätta:
inte A + inte B = A eller B
Som sagt, inte helt hundra, men tror det stämmer.. Dock tror jag det är lite "över-resonerat" för TS kunskap så det kan ju förkastas =)
Min direkt intiutiva tanke var:
Om A inte får vara 1 och B inte får vara 2 så söker vi rader där varken A är 1 eller B är 2. Slänger upp en sanningstabell längre ner
Citat:
Ursprungligen postat av Tjusifer
UPDATE
tabell1 SET
kolumn WHERE
vilkor...
uppdaterar faktiskt den namngivna kolumnen för vilken vilkoren gäller i WHERE clausen. Jag får inte riktigt till det att det ska påverka vilkoren på något sätt.
Hmm undrar om detta inte slutar med att jag installerar mysql och kör igenom den här satsen alltså...

Jo, det stämmer helt att de raderna kommer uppdateras (Vet iof inte om den gör det exakt men den kommer i alla fall hitta de extra raderna och arbeta med dom, sen om de har en bra algoritm som redan ser att korrekt värde är insatt eller inte är ju orelevant)
Men frågeställningen TS fick var ju som sagt vilka rader som kommer ha ett annat värde på raden än tidigare, och om 5 uppdateras till 5 så får det ju trots allt inte något annat värde (I folkmun iaf, hur det sker bitvis är ju en annan sak men troligtvis inte det TS söker =) )
Således "ändras" inte raden om man ser till värdet raden har före och efter uppdatering.
Sanningstabellen för !A&!B (Not A and not B) (A <> 1 AND B <> 2):
A B !A !B !A&!B
0 0 1 1 1
0 1 1 0 0
1 0 0 1 0
1 1 0 0 0
Som vi ser i tabellen kommer alla fall där lokal = Orion (A = 1) eller kurs = Java1 (B = 2) resultera i 0 (False), och enda satsen som resulterar i 1 (True = Raden hittas) är !(AvB).
(Min logik tidigare var nog felaktig, det ser ut som att (!A&!B) = !(AvB). Orkar inte se om de är ekvivalenta med det jag skrev tidigare)
Vad vi kan se i den här tabellen, förenklat, är således att vi bara söker de fall där lokal INTE är lika med orion OCH kurs INTE är lika med Java1.
Alla resultat där lokal = Orion och kurs = (vadsom) eller kurs = Java1 och lokal = (vadsom) kommer generera false.
Jag vet inte hur jag kan förklara bättre...
Men.. Ja, installera och kör för all del =) Det bör gå att googla SQL-checkers också.
Tänk dock på att han söker raden där lärarens integer har förändrats jämfört med tidigare värde, dvs SQL-satsen:
WHERE lokal <> 'Orion' AND kurs <> 'Java1' AND larare <> 5
Edit: Skulle jag skriva en databas som bygger på SQL skulle jag 'kompilerat' ner en sådan här sats (Dvs, sätt X till Y där A = B) till "Sätt X till Y där A = B och X <> Y). Det skulle dra ner på körningstid, så det kan mycket väl redan vara implementerat i de bättre motorerna.