|  | 		    
					
        
         
          
         
	
          | |  | MySQL: find nærmeste højere værdi? Fra : Tonni Aagesen
 | 
 Dato :  17-10-01 18:22
 | 
 |  | Hejsa NG,
 
 En tabel ser sådan ud:
 
 ID        Tal
 1            2
 2            8
 3            5
 4            4
 5            11
 
 Hvis jeg så har en værdi f.eks "3", hvordan får jeg så resultatet af en
 query til at være "4".
 
 Eks: ("SELECT ID FROM table WHERE Tal >= 3 LIMIT 1"); vil, så vidt jeg ved,
 returnere "ID = 3" da den første række i tabellen med "Tal > 3" har "ID =
 3". Men i mit tilfælde skal jeg bruge den nærmeste højere værdi, altså
 rækken med "ID =  4" og "Tal = 4".
 
 Hvad skriver jeg i SQL sætningen??
 
 --
 Mvh
 Tonni Aagesen
 agent29@mail1.stofanet.dk
 
 
 
 
 
 
 |  |  | 
  Kim Petersen (17-10-2001) 
 
	
          | |  | Kommentar Fra : Kim Petersen
 | 
 Dato :  17-10-01 18:26
 | 
 |  | "Tonni Aagesen" <use.my@signature.com> writes:
 
 > Hejsa NG,
 >
 > En tabel ser sådan ud:
 >
 > ID        Tal
 > 1            2
 > 2            8
 > 3            5
 > 4            4
 > 5            11
 >
 > Hvis jeg så har en værdi f.eks "3", hvordan får jeg så resultatet af en
 > query til at være "4".
 >
 > Eks: ("SELECT ID FROM table WHERE Tal >= 3 LIMIT 1"); vil, så vidt jeg ved,
 > returnere "ID = 3" da den første række i tabellen med "Tal > 3" har "ID =
 > 3". Men i mit tilfælde skal jeg bruge den nærmeste højere værdi, altså
 > rækken med "ID =  4" og "Tal = 4".
 >
 > Hvad skriver jeg i SQL sætningen??
 SELECT min(ID) FROM table WHERE Tal >= 3;
 
 Og i tilfælde af at den _skal_ være større...
 
 SELECT min(ID) FROM table WHERE Tal > 3;
 
 Hehe
 
 --
 Mvh. Kim Petersen  /| Tlf:   +4575831551          |\ Jomfru Ingefreds Vej 18
 Software Engineer / | Fax:   (none atm.)          | \             7100 Vejle
 LSS              /  | Email:  kim@vindinggaard.dk |  \          DK - Danmark
 
 
 |  |  | 
  Nis Jorgensen (18-10-2001) 
 
	
          | |  | Kommentar Fra : Nis Jorgensen
 | 
 Dato :  18-10-01 09:30
 | 
 |  | 
 
            On Wed, 17 Oct 2001 19:21:32 +0200, "Tonni Aagesen"
 <use.my@signature.com> wrote:
 >
 >En tabel ser sådan ud:
 >
 >ID        Tal
 >1            2
 >2            8
 >3            5
 >4            4
 >5            11
 >
 >Hvis jeg så har en værdi f.eks "3", hvordan får jeg så resultatet af en
 >query til at være "4".
 SELECT 4;      Ah, du vil have den til at være afhængig af værdien (3) og af tabellen
 >Eks: ("SELECT ID FROM table WHERE Tal >= 3 LIMIT 1"); vil, så vidt jeg ved,
 >returnere "ID = 3" da den første række i tabellen med "Tal > 3" har "ID =
 >3". Men i mit tilfælde skal jeg bruge den nærmeste højere værdi, altså
 >rækken med "ID =  4" og "Tal = 4".
 Jeg forstår ikke dit eksempel. Men jeg tror jeg forstår dit problem.
 Havde du haft subqueries, ville der være flere muligheder. Men prøvÆ
 SELECT ID FROM table WHERE Tal >= 3 ORDER BY Tal LIMIT 1
 Bemærk for øvrigt forskellen på ">=" og ">"
 -- 
 Nis Jorgensen
 Amsterdam
 Please include only relevant quotes, and reply below the quoted text. Thanks
            
             |  |  | 
  Kristian Damm Jensen (18-10-2001) 
 
	
          | |  | Kommentar Fra : Kristian Damm Jensen
 | 
 Dato :  18-10-01 17:40
 | 
 |  | 
 
            Nis Jorgensen wrote:
 <snip>
 > SELECT ID FROM table WHERE Tal >= 3 ORDER BY Tal LIMIT 1
 Nej, nej, nej! 
 Hvorfor sortere hele mellemresultatet (potentielt hele tabellen) frem
 for at lade optimizeren og det relevante index gøre arbejdet?
 Som Kim Petersen skrev:
 SELECT min(ID) FROM table WHERE Tal >= 3 
 --
 Kristian Damm Jensen         | Feed the hungry. Go to 
 kristian-damm.jensen@cgey.dk | http://www.thehungersite.com Two wrongs doesn't make a right, but three lefts does.
            
             |  |  | 
   Nis Jorgensen (19-10-2001) 
 
	
          | |  | Kommentar Fra : Nis Jorgensen
 | 
 Dato :  19-10-01 10:19
 | 
 |  | On Thu, 18 Oct 2001 18:39:56 +0200, Kristian Damm Jensen
 <kristian-damm.jensenRE@MOVEcgey.com> wrote:
 
 >
 >> SELECT ID FROM table WHERE Tal >= 3 ORDER BY Tal LIMIT 1
 >
 >Nej, nej, nej!
 >
 >Hvorfor sortere hele mellemresultatet (potentielt hele tabellen) frem
 >for at lade optimizeren og det relevante index gøre arbejdet?
 
 Hvorfor gøre optimizerens arbejde for den?
 
 --
 Nis Jorgensen
 Amsterdam
 
 Please include only relevant quotes, and reply below the quoted text. Thanks
 
 
 |  |  | 
  Adam Sjøgren (18-10-2001) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  18-10-01 17:43
 | 
 |  | On Wed, 17 Oct 2001 19:21:32 +0200, Tonni Aagesen wrote:
 
 > En tabel ser sådan ud:
 
 > ID        Tal
 > 1            2
 > 2            8
 > 3            5
 > 4            4
 > 5            11
 
 > Hvis jeg så har en værdi f.eks "3", hvordan får jeg så resultatet af
 > en query til at være "4".
 
 > Eks: ("SELECT ID FROM table WHERE Tal >= 3 LIMIT 1"); vil, så vidt
 > jeg ved, returnere "ID = 3" da den første række i tabellen med "Tal
 > > 3" har "ID = 3".
 
 Nej.
 
 Den vil returnere 2, 3, 4 eller 5 som MySQL nu har lyst til det.
 
 "select id from tabel where tal>=3;" giver dig alle de id'er hvor det
 tilhørende tal er større end tre. I vilkårlig rækkefølge.
 
 Eks:
 
 mysql> select id from tabel where tal>=3;
 +------+
 | id   |
 +------+
 |    5 |
 |    2 |
 |    3 |
 |    4 |
 +------+
 
 Når du tilføjer "limit 1", får du det af tallene som MySQL nu
 tilfældigvis fandt praktisk at vise først.
 
 Eks:
 
 mysql> select id from tabel where tal>=3 limit 1;
 +------+
 | id   |
 +------+
 |    5 |
 +------+
 
 (og det kan ændre sig fra gang til gang uden at det betyder at der er
 noget galt med MySQL).
 
 Du skal have noget sortering ("order by") ind over.
 
 Hvad du egentlig ønsker er ikke klart ud fra dit spørgsmål. Prøv at
 formulere det klarere.
 
 Hvis det du vil er, at finde det første id hvis tilhørende tal er
 større end 3, så er det vel bare:
 
 mysql> select id from tabel where tal>3 order by tal limit 1;
 +------+
 | id   |
 +------+
 |    4 |
 +------+
 
 ?
 
 
 Mvh.
 
 --
 "Af de fire elementer har jeg                                 Adam Sjøgren
 altid holdt mest af luften."                            asjo@koldfront.dk
 
 
 |  |  | 
  Tonni Aagesen (21-10-2001) 
 
	
          | |  | Kommentar Fra : Tonni Aagesen
 | 
 Dato :  21-10-01 01:32
 | 
 |  | 
 
            Hold da op!! Har ikke lige tjekket tråden de sidste dage - men tak for
 entusiasmen allesammen!
 "Adam Sjøgren" <asjo@koldfront.dk> skrev i en meddelelse
 news:87pu7kkig8.fsf@virgil.koldfront.dk...
 > (og det kan ændre sig fra gang til gang uden at det betyder at der er
 > noget galt med MySQL).
 Det var præcis det jeg ville vide    > Hvad du egentlig ønsker er ikke klart ud fra dit spørgsmål. Prøv at
 > formulere det klarere.
 Tabellen er en slags arrangementskalender, hvor hver række jo så er et
 arrangement. Tabellen ser delvist ud som følger:
 id                dato                 tid
 1           2001-10-10        19:30
 2           2001-10-12        19:00
 3           2001-10-10        20:00
 - hvor DATO er "år-måned-dag". Jeg skal så finde det næstkommende
 arrangement, men kan ikke bruge eks. dette:
 (SELECT * FROM table WHERE dato >= "i dag" AND tid >= "NU!") - hvis der ikke
 er nogle arrangementer "i dag" vil den så rigtigt nok finde næste
 arrangement rent datomæssigt, men da arrangementet ikke er samme dag, er det
 jo ligegyldigt hvilket tidspunkt arrangementet løber af stablen og så er det
 jo ikke smart at sætte en betingelse på tid - forstår I?
 Jeg har løst problemet på en snirklet, men dog brugbar måde, ved at udføre 2
 queries. Den første finder ud af om der er et arrangement "i dag", den næste
 er så betinget af den første query. Hmm... I får da lige det hele     $result = mysql_query ("SELECT * FROM table WHERE dato = $Today AND tid >=
 '$Now'", $link);
  $num_rows = mysql_num_rows($result);
  if ($num_rows == 0) {
     $sql = "SELECT * FROM table WHERE dato > $Today ORDER BY Odato ASC, tid
 ASC LIMIT 1";
  }
  else {
     $sql = "SELECT * FROM table WHERE dato >= $Today AND tid >= '$Now' ORDER
 BY Odato ASC, tid ASC LIMIT 1";
  }
 $result1 = mysql_query ($sql, $link)
 Rimeligt snirklet som I kan se (jeg er ikke så skrap til SQL) - er der en
 nemmere måde???
 --
 Mvh
 Tonni Aagesen
 agent29@mail1.stofanet.dk
            
             |  |  | 
   Kristian Damm Jensen (22-10-2001) 
 
	
          | |  | Kommentar Fra : Kristian Damm Jensen
 | 
 Dato :  22-10-01 10:10
 | 
 |  | 
 
            Tonni Aagesen wrote:
 > 
 > Hold da op!! Har ikke lige tjekket tråden de sidste dage - men tak for
 > entusiasmen allesammen!
 > 
 > "Adam Sjøgren" <asjo@koldfront.dk> skrev i en meddelelse
 > news:87pu7kkig8.fsf@virgil.koldfront.dk...
 > 
 > > (og det kan ændre sig fra gang til gang uden at det betyder at der er
 > > noget galt med MySQL).
 > 
 > Det var præcis det jeg ville vide    > 
 > > Hvad du egentlig ønsker er ikke klart ud fra dit spørgsmål. Prøv at
 > > formulere det klarere.
 > 
 > Tabellen er en slags arrangementskalender, hvor hver række jo så er et
 > arrangement. Tabellen ser delvist ud som følger:
 > 
 > id                dato                 tid
 > 1           2001-10-10        19:30
 > 2           2001-10-12        19:00
 > 3           2001-10-10        20:00
 > 
 > - hvor DATO er "år-måned-dag". Jeg skal så finde det næstkommende
 > arrangement, men kan ikke bruge eks. dette:
 > 
 > (SELECT * FROM table WHERE dato >= "i dag" AND tid >= "NU!") - hvis der ikke
 > er nogle arrangementer "i dag" vil den så rigtigt nok finde næste
 > arrangement rent datomæssigt, men da arrangementet ikke er samme dag, er det
 > jo ligegyldigt hvilket tidspunkt arrangementet løber af stablen og så er det
 > jo ikke smart at sætte en betingelse på tid - forstår I?
 Ja.
 Fænomenet kaldes leksikalsk sortering og kræver at man laver sin
 forespørgsel bare en anelse mere avanceret:
 SELECT * FROM tabel 
 WHERE dato = "i dag" AND tid >= "NU!"
    or dato > "i dag" 
 sort by dato, tid
 limit 1
 (Her er for en gang skyld et tilfælde, hvor jeg vil foretrække limit.
 Når det du søger minimum på er delt over to felter og du ikke har adgang
 tilsubselects, kan det blive lidt langhåret (unødigt kompliceret) at
 klare sig uden.)
 <snip>
 --
 Kristian Damm Jensen         | Feed the hungry. Go to 
 kristian-damm.jensen@cgey.dk | http://www.thehungersite.com Two wrongs doesn't make a right, but three lefts does.
            
             |  |  | 
    Tonni Aagesen (22-10-2001) 
 
	
          | |  | Kommentar Fra : Tonni Aagesen
 | 
 Dato :  22-10-01 13:27
 | 
 |  | 
 
            "Kristian Damm Jensen" <kristian-damm.jensenRE@MOVEcgey.com> skrev i en
 meddelelse news:3BD3E24B.61ED7949@MOVEcgey.com...
 > Ja.
 >
 > Fænomenet kaldes leksikalsk sortering og kræver at man laver sin
 > forespørgsel bare en anelse mere avanceret:
 >
 > SELECT * FROM tabel
 > WHERE dato = "i dag" AND tid >= "NU!"
 >    or dato > "i dag"
 > sort by dato, tid
 > limit 1
 Skulle der virkelig ikke mere til    Mange tak!!
 Men hvad nu hvis jeg sætter LIMIT til 3, og der eks. to arrangementer der
 opfylder betingelsen: (WHERE dato = "i dag" AND tid >= "NU!") og x antal der
 opfylder betingelsen (OR dato > "i dag")??
 Vil den så spytte de to arrangementer fra "i dag" og det førstkommende
 arrrangement fra "i morgen"??
 --
 Mvh
 Tonni Aagesen
 agent29@mail1.stofanet.dk
            
             |  |  | 
     Kristian Damm Jensen (24-10-2001) 
 
	
          | |  | Kommentar Fra : Kristian Damm Jensen
 | 
 Dato :  24-10-01 10:24
 | 
 |  | 
 
            Tonni Aagesen wrote:
 > 
 > "Kristian Damm Jensen" <kristian-damm.jensenRE@MOVEcgey.com> skrev i en
 > meddelelse news:3BD3E24B.61ED7949@MOVEcgey.com...
 > 
 > > Ja.
 > >
 > > Fænomenet kaldes leksikalsk sortering og kræver at man laver sin
 > > forespørgsel bare en anelse mere avanceret:
 > >
 > > SELECT * FROM tabel
 > > WHERE dato = "i dag" AND tid >= "NU!"
 > >    or dato > "i dag"
 > > sort by dato, tid
 > > limit 1
 > 
 > Skulle der virkelig ikke mere til    Mange tak!!
 > 
 > Men hvad nu hvis jeg sætter LIMIT til 3, og der eks. to arrangementer der
 > opfylder betingelsen: (WHERE dato = "i dag" AND tid >= "NU!") og x antal der
 > opfylder betingelsen (OR dato > "i dag")??
 > 
 > Vil den så spytte de to arrangementer fra "i dag" og det førstkommende
 > arrrangement fra "i morgen"??
 Ja.
 --
 Kristian Damm Jensen         | Feed the hungry. Go to 
 kristian-damm.jensen@cgey.dk | http://www.thehungersite.com Two wrongs doesn't make a right, but three lefts does.
            
             |  |  | 
  Adam Sjøgren (18-10-2001) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  18-10-01 19:40
 | 
 |  | On Thu, 18 Oct 2001 18:39:56 +0200, Kristian Damm Jensen wrote:
 
 > Nis Jorgensen wrote: <snip>
 
 >> SELECT ID FROM table WHERE Tal >= 3 ORDER BY Tal LIMIT 1
 
 > Nej, nej, nej!
 
 Jo jo jo.
 
 > Hvorfor sortere hele mellemresultatet (potentielt hele tabellen)
 > frem for at lade optimizeren og det relevante index gøre arbejdet?
 
 Fordi det er nødvendigt?
 
 Den ovenstående og den nedenstående stump SQL giver ikke samme
 resultat*.
 
 > Som Kim Petersen skrev:
 
 > SELECT min(ID) FROM table WHERE Tal >= 3
 
 Dette giver nemlig:
 
 mysql> SELECT min(ID) FROM tabel WHERE Tal >= 3;
 +---------+
 | min(ID) |
 +---------+
 |       2 |
 +---------+
 
 Hvor det første giver:
 
 mysql> SELECT ID FROM tabel WHERE Tal >= 3 ORDER BY Tal LIMIT 1;
 +------+
 | ID   |
 +------+
 |    4 |
 +------+
 
 
 Mvh.
 
 Adam.
 
 (*: Med mindre da at der gælder hvis et id er større end et andet, så
 er det tilhørende tal også, og det gælder ihvertfald ikke for
 eksemplet i den oprindelige artikel (f.ex. (2, 8) og (3, 5)).
 
 --
 "Af de fire elementer har jeg                                 Adam Sjøgren
 altid holdt mest af luften."                            asjo@koldfront.dk
 
 
 |  |  | 
  Adam Sjøgren (18-10-2001) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  18-10-01 19:41
 | 
 |  | On Thu, 18 Oct 2001 18:39:56 +0200, Kristian Damm Jensen wrote:
 
 > Nis Jorgensen wrote: <snip>
 
 >> SELECT ID FROM table WHERE Tal >= 3 ORDER BY Tal LIMIT 1
 
 > Nej, nej, nej!
 
 Jo, såmænd.
 
 > Hvorfor sortere hele mellemresultatet (potentielt hele tabellen)
 > frem for at lade optimizeren og det relevante index gøre arbejdet?
 
 Fordi det er nødvendigt?
 
 Den ovenstående og den nedenstående stump SQL giver ikke samme
 resultat*.
 
 > Som Kim Petersen skrev:
 
 > SELECT min(ID) FROM table WHERE Tal >= 3
 
 Dette giver nemlig:
 
 mysql> SELECT min(ID) FROM tabel WHERE Tal >= 3;
 +---------+
 | min(ID) |
 +---------+
 |       2 |
 +---------+
 
 Hvor det første giver:
 
 mysql> SELECT ID FROM tabel WHERE Tal >= 3 ORDER BY Tal LIMIT 1;
 +------+
 | ID   |
 +------+
 |    4 |
 +------+
 
 
 Mvh.
 
 Adam.
 
 (*: Med mindre da at der gælder hvis et id er større end et andet, så
 er det tilhørende tal også, og det gælder ihvertfald ikke for
 eksemplet i den oprindelige artikel (f.ex. (2, 8) og (3, 5)).
 
 --
 "Af de fire elementer har jeg                                 Adam Sjøgren
 altid holdt mest af luften."                            asjo@koldfront.dk
 
 
 |  |  | 
  Kim Petersen (18-10-2001) 
 
	
          | |  | Kommentar Fra : Kim Petersen
 | 
 Dato :  18-10-01 20:17
 | 
 |  | asjo@koldfront.dk (Adam Sjøgren) writes:
 
 > On Thu, 18 Oct 2001 18:39:56 +0200, Kristian Damm Jensen wrote:
 >
 > > Nis Jorgensen wrote: <snip>
 >
 > >> SELECT ID FROM table WHERE Tal >= 3 ORDER BY Tal LIMIT 1
 >
 > > Nej, nej, nej!
 >
 > Jo, såmænd.
 >
 > > Hvorfor sortere hele mellemresultatet (potentielt hele tabellen)
 > > frem for at lade optimizeren og det relevante index gøre arbejdet?
 >
 > Fordi det er nødvendigt?
 >
 > Den ovenstående og den nedenstående stump SQL giver ikke samme
 > resultat*.
 >
 > > Som Kim Petersen skrev:
 >
 > > SELECT min(ID) FROM table WHERE Tal >= 3
 >
 > Dette giver nemlig:
 >
 > mysql> SELECT min(ID) FROM tabel WHERE Tal >= 3;
 > +---------+
 > | min(ID) |
 > +---------+
 > |       2 |
 > +---------+
 >
 > Hvor det første giver:
 >
 > mysql> SELECT ID FROM tabel WHERE Tal >= 3 ORDER BY Tal LIMIT 1;
 > +------+
 > | ID   |
 > +------+
 > |    4 |
 > +------+
 >
 
 Det har du da såmen ret i.... Jeg læste åbenbart for hurtigt.
 
 SELECT ID FROM table WHERE Tal=(SELECT min(Tal) FROM table WHERE Tal>=3);
 
 Og i tilfælde af at MySQL ikke kan lave subselects.
 
 SELECT min(Tal) INTO TEMPORARY tmp WHERE Tal>=3;
 SELECT ID FROM table t,tmp p WHERE t.Tal=p.Tal;
 
 
 --
 Mvh. Kim Petersen  /| Tlf:   +4575831551          |\ Jomfru Ingefreds Vej 18
 Software Engineer / | Fax:   (none atm.)          | \             7100 Vejle
 LSS              /  | Email:  kim@vindinggaard.dk |  \          DK - Danmark
 
 
 |  |  | 
  Adam Sjøgren (18-10-2001) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  18-10-01 20:48
 | 
 |  | 
 
            On 18 Oct 2001 21:16:59 +0200, Kim Petersen wrote:
 > Og i tilfælde af at MySQL ikke kan lave subselects.
 Det kan den vist ikke:
 http://www.mysql.com/doc/M/i/Missing_Sub-selects.html > SELECT min(Tal) INTO TEMPORARY tmp WHERE Tal>=3;
 > SELECT ID FROM table t,tmp p WHERE t.Tal=p.Tal;
 Får man så ikke mere end en række ud hvis der er flere id'er der har
 samme tal?
 Men det er naturligvis bare et spørgsmål om at sætte en limit 1 på den
 sidste select.
 (Det kræver vist i øvrigt lidt mere gymnastik i MySQL (select into er
  en Oracle SQL udvidelse, skriver de:
 http://www.mysql.com/doc/M/i/Missing_SELECT_INTO_TABLE.html
 http://www.mysql.com/doc/S/E/SELECT.html)) [Og der er selvfølgelig stadigvæk > / >= fejlen].
   Mvh.
 -- 
  "Af de fire elementer har jeg                                 Adam Sjøgren
   altid holdt mest af luften."                            asjo@koldfront.dk
            
             |  |  | 
  Kim Petersen (18-10-2001) 
 
	
          | |  | Kommentar Fra : Kim Petersen
 | 
 Dato :  18-10-01 21:30
 | 
 |  | 
 
            asjo@koldfront.dk (Adam Sjøgren) writes:
 > On 18 Oct 2001 21:16:59 +0200, Kim Petersen wrote:
 > 
 > > Og i tilfælde af at MySQL ikke kan lave subselects.
 > 
 > Det kan den vist ikke:
 >  http://www.mysql.com/doc/M/i/Missing_Sub-selects.html > 
 > > SELECT min(Tal) INTO TEMPORARY tmp WHERE Tal>=3;
 > > SELECT ID FROM table t,tmp p WHERE t.Tal=p.Tal;
 > 
 > Får man så ikke mere end en række ud hvis der er flere id'er der har
 > samme tal?
 > 
 > Men det er naturligvis bare et spørgsmål om at sætte en limit 1 på den
 > sidste select.
 Udgangspunktet var en tabel hvor dette ikke var tilfældet - og i til-
 fældet hvor det er sandt - så bør du have et udgangspunkt for _hvilket_
 ID du vil have - ikke? (så igen er LIMIT nok ikke det fede)
 > 
 > (Det kræver vist i øvrigt lidt mere gymnastik i MySQL (select into er
 >  en Oracle SQL udvidelse, skriver de:
 >  http://www.mysql.com/doc/M/i/Missing_SELECT_INTO_TABLE.html >  http://www.mysql.com/doc/S/E/SELECT.html)) De har ikke ret - SQL92 standarden definerer "SELECT INTO", og PostgreSQL kan
 også (om SQL92 accepterer TEMPORARY er så noget andet [har ikke checket]):
 SQL92 BNF-> http://www.contrib.andrew.cmu.edu/%7Eshadow/sql/sql2bnf.aug92.txt > 
 > [Og der er selvfølgelig stadigvæk > / >= fejlen].
 Den gik jeg udfra vi alle havde argumenteret om tidligere    -- 
 Mvh. Kim Petersen  /| Tlf:   +4575831551          |\ Jomfru Ingefreds Vej 18
 Software Engineer / | Fax:   (none atm.)          | \             7100 Vejle
 LSS              /  | Email:  kim@vindinggaard.dk |  \          DK - Danmark
            
             |  |  | 
  Kim Petersen (18-10-2001) 
 
	
          | |  | Kommentar Fra : Kim Petersen
 | 
 Dato :  18-10-01 21:36
 | 
 |  | 
 
            asjo@koldfront.dk (Adam Sjøgren) writes:
 > On 18 Oct 2001 21:16:59 +0200, Kim Petersen wrote:
 > 
 > > Og i tilfælde af at MySQL ikke kan lave subselects.
 > 
 > Det kan den vist ikke:
 >  http://www.mysql.com/doc/M/i/Missing_Sub-selects.html Den giver så tilgengæld et par noter til hvordan du kommer udenom...
 SELECT ID FROM tabel WHERE Tal IN (SELECT min(Tal) FROM tabel WHERE Tal>=3);
 burde virke.
 MySQL's begrænsninger er iøvrigt een af grundene til at jeg ikke bruger den
 til andet end trivialiteter.
 -- 
 Mvh. Kim Petersen  /| Tlf:   +4575831551          |\ Jomfru Ingefreds Vej 18
 Software Engineer / | Fax:   (none atm.)          | \             7100 Vejle
 LSS              /  | Email:  kim@vindinggaard.dk |  \          DK - Danmark
            
             |  |  | 
  Adam Sjøgren (19-10-2001) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  19-10-01 08:51
 | 
 |  | 
 
            On 18 Oct 2001 22:36:27 +0200, Kim Petersen wrote:
 >> Det kan den vist ikke:
 >> http://www.mysql.com/doc/M/i/Missing_Sub-selects.html > Den giver så tilgengæld et par noter til hvordan du kommer udenom...
 > SELECT ID FROM tabel WHERE Tal IN (SELECT min(Tal) FROM tabel WHERE
 > Tal>=3);
 > burde virke.
 Øh, nej - der bruger du jo netop et sub-select    > MySQL's begrænsninger er iøvrigt een af grundene til at jeg ikke
 > bruger den til andet end trivialiteter.
 Webfnidder er som regel trivialiteter. Til gengæld siges det at den er
 rimelig hurtig.
   Mvh.
 -- 
  "Af de fire elementer har jeg                                 Adam Sjøgren
   altid holdt mest af luften."                            asjo@koldfront.dk
            
             |  |  | 
  Kim Petersen (19-10-2001) 
 
	
          | |  | Kommentar Fra : Kim Petersen
 | 
 Dato :  19-10-01 09:40
 | 
 |  | 
 
            asjo@koldfront.dk (Adam Sjøgren) writes:
 > On 18 Oct 2001 22:36:27 +0200, Kim Petersen wrote:
 > 
 > >> Det kan den vist ikke:
 > >> http://www.mysql.com/doc/M/i/Missing_Sub-selects.html > 
 > > Den giver så tilgengæld et par noter til hvordan du kommer udenom...
 > 
 > > SELECT ID FROM tabel WHERE Tal IN (SELECT min(Tal) FROM tabel WHERE
 > > Tal>=3);
 > 
 > > burde virke.
 > 
 > Øh, nej - der bruger du jo netop et sub-select    Heh, ja men den dokumentation du gav - siger at denne er mulig. Hvor imod
 den anden ikke var.
 > 
 > > MySQL's begrænsninger er iøvrigt een af grundene til at jeg ikke
 > > bruger den til andet end trivialiteter.
 > 
 > Webfnidder er som regel trivialiteter. Til gengæld siges det at den er
 > rimelig hurtig.
 > 
 Kommer absolut an på hvad slag Webfnidder - en tabel => MySQL - flere
 sammenkoblede tabeller => PostgreSQL, Oracle o.lign.
 -- 
 Mvh. Kim Petersen  /| Tlf:   +4575831551          |\ Jomfru Ingefreds Vej 18
 Software Engineer / | Fax:   (none atm.)          | \             7100 Vejle
 LSS              /  | Email:  kim@vindinggaard.dk |  \          DK - Danmark
            
             |  |  | 
  Adam Sjøgren (19-10-2001) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  19-10-01 08:55
 | 
 |  | 
 
            On 18 Oct 2001 22:29:43 +0200, Kim Petersen wrote:
 > Udgangspunktet var en tabel hvor dette ikke var tilfældet
 Ja. Det var også en tabel med 5 indgange - hvad som helst smart dér er
 ligegyldigt.
 > - og i til- fældet hvor det er sandt - så bør du have et
 > udgangspunkt for _hvilket_ ID du vil have - ikke?
 Selvom udgangspunktet var ret uklart formuleret, så kunne man gætte
 sig til noget om de andre ting, men ikke til noget om dette.
 Det jeg tænkte var at er der forskel på om man _altid_ får højest et
 element ud, eller om man med forskellige data i tabellen kan få flere.
 Jeg ville i hvertfald blive forvirret første gang der kom mere end en
 række ud (givet den oprindelige "opgaveformulering").
 (Men jeg er heller ikke vant til at lege med databaser).
 > (så igen er LIMIT nok ikke det fede)
 Det kommer naturligvis an på hvad man vil opnå.
 >>  (Det kræver vist i øvrigt lidt mere gymnastik i MySQL (select into
 >> er en Oracle SQL udvidelse, skriver de:
 >> http://www.mysql.com/doc/M/i/Missing_SELECT_INTO_TABLE.html >> http://www.mysql.com/doc/S/E/SELECT.html)) > De har ikke ret - SQL92 standarden definerer "SELECT INTO",
 De kunne have prøvet at redde den ved at sige at SQL ikke nødvendigvis
 er SQL92, men de nævner ikke forskellen på:
 http://www.mysql.com/doc/D/i/Differences_from_ANSI.html så det kan de ikke.
 Sikke pinligt for dem!
   Mvh.
 -- 
  "Af de fire elementer har jeg                                 Adam Sjøgren
   altid holdt mest af luften."                            asjo@koldfront.dk
            
             |  |  | 
  Adam Sjøgren (19-10-2001) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  19-10-01 15:43
 | 
 |  | 
 
            On 19 Oct 2001 10:40:13 +0200, Kim Petersen wrote:
 >>>> Det kan den vist ikke:
 >>>> http://www.mysql.com/doc/M/i/Missing_Sub-selects.html >>> Den giver så tilgengæld et par noter til hvordan du kommer
 >>> udenom...
 >>> SELECT ID FROM tabel WHERE Tal IN (SELECT min(Tal) FROM tabel
 >>> WHERE Tal>=3);
 >>> burde virke.
 >> Øh, nej - der bruger du jo netop et sub-select    > Heh, ja men den dokumentation du gav - siger at denne er mulig. Hvor
 > imod den anden ikke var.
 Nej (jeg prøvede naturligvis inden jeg postede mit svar). Der står:
  "1.8.4.1 Sub-selects
   MySQL currently only supports sub selects of the form INSERT
   ... SELECT ... and REPLACE ... SELECT .... You can however use the
   function IN() in other contexts.
   In many cases you can rewrite the query without a sub-select:
   SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
   This can be re-written as:
   SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;"
 Det kunne være formuleret bedre, men der menes at det første - som
 ikke understøttes - kan omskrives til det andet - der gør.
 > Kommer absolut an på hvad slag Webfnidder - en tabel => MySQL -
 > flere sammenkoblede tabeller => PostgreSQL, Oracle o.lign.
 Alt for kortfattet generalisering => sjældent særligt nyttigt.
    ,
 -- 
  "Af de fire elementer har jeg                                 Adam Sjøgren
   altid holdt mest af luften."                            asjo@koldfront.dk
            
             |  |  | 
  Kristian Damm Jensen (22-10-2001) 
 
	
          | |  | Kommentar Fra : Kristian Damm Jensen
 | 
 Dato :  22-10-01 10:00
 | 
 |  | 
 
            Adam Sjøgren wrote:
 <snip>
 > Nej (jeg prøvede naturligvis inden jeg postede mit svar). Der står:
 > 
 >  "1.8.4.1 Sub-selects
 > 
 >   MySQL currently only supports sub selects of the form INSERT
 >   ... SELECT ... and REPLACE ... SELECT .... You can however use the
 >   function IN() in other contexts.
 > 
 >   In many cases you can rewrite the query without a sub-select:
 > 
 >   SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
 > 
 >   This can be re-written as:
 > 
 >   SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;"
 > 
 > Det kunne være formuleret bedre, men der menes at det første - som
 > ikke understøttes - kan omskrives til det andet - der gør.
 Hvilket oven i købet ikke er korrekt, da den sidste af de to kan give
 anledning til dubletter, hvor den første ikke gør det. Og distinct
 virker ikke, da den fjerner de dubletter, der kunne komme fra den
 første.
 <snip>
 --
 Kristian Damm Jensen         | Feed the hungry. Go to 
 kristian-damm.jensen@cgey.dk | http://www.thehungersite.com Two wrongs doesn't make a right, but three lefts does.
            
             |  |  | 
 |  |