2009-12-15, 05:52
  #1
Medlem
Lethargies avatar
Skulle gärna behöva ha svar på följande;


http://img46.imageshack.us/i/underscore.png/





hur många rader skulle förändras (vara annorlunda efter operationen) av följande SQL-sats:
UPDATE Ktillf SET lärare = 5 WHERE lokal <> 'Orion' AND kurs <> 'Java1'
3
7
2
5
8
4
1
6
Citera
2009-12-15, 05:55
  #2
Medlem
Lethargies avatar
Jag får det till 8... Hade varit bra att få veta om det är rätt eller inte, sitter med en jävla quiz där man måste få minst 17 av 18 rätt, och man får inte se vilka man har fel på iheller... jävla fitt quizz, suttit hela natten nu.. skönt
Citera
2009-12-15, 07:14
  #3
Medlem
Garnaals avatar
Är väldig nybörjare på SQL, men jag får det i alla fall till 5. (Förutsatt att <> är detsamma som IS NOT)
Citera
2009-12-15, 08:06
  #4
Medlem
Foveas avatar
2 stycken.
4:e och 7:e raden.

Alla andra rader innehåller antingen 5, Orion eller Java1.
Citera
2009-12-15, 08:47
  #5
Medlem
_ikaros_s avatar
Citat:
Ursprungligen postat av Fovea
2 stycken.
4:e och 7:e raden.

Alla andra rader innehåller antingen 5, Orion eller Java1.

What he said.
Citera
2009-12-15, 09:12
  #6
Medlem
det finns ju flera rader där lokalen är skild från orion och kursen skild från java1 (samtidigt)¨. Raderna 2, 4, 5, 7, 9.
__________________
Senast redigerad av Tjusifer 2009-12-15 kl. 09:27.
Citera
2009-12-15, 09:22
  #7
Medlem
Citat:
Ursprungligen postat av Fovea
2 stycken.
4:e och 7:e raden.

Alla andra rader innehåller antingen 5, Orion eller Java1.

jo fast att lärare ska vara skild från 5 är inte ett utav vilkoren utan vad det betyder är att vi uppdaterar fältet lärare till 5 om vi hittar rader där lokal och kurs skiljer sig från orion och java1 samtidigt (dvs i samma rad).
Ja, då uppdaterar vi fältet lärare till 5.
__________________
Senast redigerad av Tjusifer 2009-12-15 kl. 09:25.
Citera
2009-12-15, 09:28
  #8
Medlem
Citat:
Ursprungligen postat av _ikaros_
What he said.


not really...
Citera
2009-12-15, 09:49
  #9
Medlem
Foveas avatar
Citat:
Ursprungligen postat av Tjusifer
det finns ju flera rader där lokalen är skild från orion och kursen skild från java1 (samtidigt)¨. Raderna 2, 4, 5, 7, 9.

Men du har villkoret:

WHERE lokal <> 'Orion' AND kurs <> 'Java1'

vilket vi kan översätta till inversen av:

WHERE lokal = 'Orion' OR kurs = 'Java1'

(AoB) = !(AvB) (Inte helt hundra på det där men det ska stämma) (Kolla logik-regler på wikipedia)

Vilket innebär att vi söker alla rader där ingen förekomst av Orion och Java1 finns.

Citat:
Ursprungligen postat av Tjusifer
jo fast att lärare ska vara skild från 5 är inte ett utav vilkoren utan vad det betyder är att vi uppdaterar fältet lärare till 5 om vi hittar rader där lokal och kurs skiljer sig från orion och java1 samtidigt (dvs i samma rad).
Ja, då uppdaterar vi fältet lärare till 5.

Jo,m det är faktiskt ett utav villkoren, dock på grund av hans formulering, och inte på grund av SQL-satsen.

Han blir tillfrågad hur många rader som skulle FÖRÄNDRAS och lägger även till (vara annorlunda efter operationen)

Citat:
hur många rader skulle förändras (vara annorlunda efter operationen) av följande SQL-sats:
UPDATE Ktillf SET lärare = 5 WHERE lokal <> 'Orion' AND kurs <> 'Java1'

Det blir ytterligare ett villkor i vårt sökta problem, och således kan vi radera alla rader där 5 redan existerar.
Citera
2009-12-15, 10:03
  #10
Medlem
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

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å...
Citera
2009-12-15, 10:19
  #11
Medlem
Foveas avatar
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.
__________________
Senast redigerad av Fovea 2009-12-15 kl. 10:23.
Citera
2009-12-15, 10:46
  #12
Medlem
Protons avatar
Citat:
(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)
DeMorgans lagar is the shit

http://sv.wikipedia.org/wiki/De_Morgans_lagar
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in