/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
slette i tabel 1 hvor tuplen ikke er i tab~
Fra : Henrik Stidsen


Dato : 17-07-03 05:19

Jeg skal have slettet nogle poster i en tabel hvor de ikke har et
link til en given anden tabel.

Hvordan klares det ? - i Oracle er det noget med (?) og IS NULL, men
denne database er MySQL...

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
Nerd is a word only used by those who can’t pronounce ’Intellectual’.
- http://query.dk/permlink.php?link=1058129898

 
 
Peter Lykkegaard (17-07-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 17-07-03 09:02


"Henrik Stidsen" <idontwantnospam@hs235.dk> wrote in message
news:Xns93BB405681AFBHS235DK@130.225.247.90...
> Jeg skal have slettet nogle poster i en tabel hvor de ikke har et
> link til en given anden tabel.
>
> Hvordan klares det ? - i Oracle er det noget med (?) og IS NULL, men
> denne database er MySQL...
>
Understøtter din version subselects?

Du kan evt bruge noget ala
Where Not Exists (Select...
eller
Where Not In (Select...

mvh/Peter Lykkegaard



Henrik Stidsen (17-07-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 17-07-03 17:49

"Peter Lykkegaard" <polonline@hotmail.com> wrote in
news:3f165759$0$32467$edfadb0f@dread16.news.tele.dk

> Understøtter din version subselects?

Det sku jeg mene den gør - det er version 4.0.13-nt

> Du kan evt bruge noget ala
> Where Not Exists (Select...
> eller
> Where Not In (Select...

SELECT * FROM tabel1 WHERE email NOT EXISTS (SELECT email FROM
tabel2)

You have an error in your SQL syntax. Check the manual that
corresponds to your MySQL server version for the right syntax to use
near 'EXISTS (SELECT email FROM tabel2)

Samme hvis jeg bruger NOT IN.

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
Nerd is a word only used by those who can’t pronounce ’Intellectual’.
- http://query.dk/permlink.php?link=1058129898

Mads Lie Jensen (17-07-2003)
Kommentar
Fra : Mads Lie Jensen


Dato : 17-07-03 19:27

On Thu, 17 Jul 2003 16:49:06 +0000 (UTC), Henrik Stidsen
<idontwantnospam@hs235.dk> wrote:

>> Understøtter din version subselects?
>
>Det sku jeg mene den gør - det er version 4.0.13-nt

....men det gør den ikke.
Først fra v. 4.1 understøtter mySQL subselects:
http://www.mysql.com/doc/en/ANSI_diff_Sub-selects.html

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk

Henrik Stidsen (17-07-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 17-07-03 20:51

Mads Lie Jensen <mads@gartneriet.dk> wrote in
news:tiqdhvstbp3g9m1ufld26vsn45o8sldifu@4ax.com

>>> Understøtter din version subselects?
>>
>>Det sku jeg mene den gør - det er version 4.0.13-nt
>
> ...men det gør den ikke.
> Først fra v. 4.1 understøtter mySQL subselects:
> http://www.mysql.com/doc/en/ANSI_diff_Sub-selects.html

Hmmm, hva gør jeg så ? - kommer også lige i tanke om at webhotellet
som det senere skal ligge på næppe har upgraderet til 4.x...

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
Nerd is a word only used by those who can’t pronounce ’Intellectual’.
- http://query.dk/permlink.php?link=1058129898

Peter Lykkegaard (17-07-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 17-07-03 21:09


"Henrik Stidsen" <idontwantnospam@hs235.dk> wrote in message
news:Xns93BBDE5479DE5HS235DK@130.225.247.90...

> Hmmm, hva gør jeg så ? - kommer også lige i tanke om at webhotellet
> som det senere skal ligge på næppe har upgraderet til 4.x...

Understøtter MySQL Outer Joins?

mvh/Peter Lykkegaard



Henrik Stidsen (17-07-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 17-07-03 22:16

"Peter Lykkegaard" <polonline@hotmail.com> wrote in
news:3f1701de$0$32433$edfadb0f@dread16.news.tele.dk

>> Hmmm, hva gør jeg så ? - kommer også lige i tanke om at
>> webhotellet som det senere skal ligge på næppe har upgraderet
>> til 4.x...
>
> Understøtter MySQL Outer Joins?

Nej, kun left, rigt og inner så vidt jeg kunne læse mig frem til i
dokumentationen.

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
Nerd is a word only used by those who can’t pronounce ’Intellectual’.
- http://query.dk/permlink.php?link=1058129898

Jens Gyldenkærne Cla~ (17-07-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 17-07-03 21:14

Henrik Stidsen skrev:

>> Understøtter din version subselects?
>
> Det sku jeg mene den gør - det er version 4.0.13-nt

Jeg skal ikke gøre mig klog på subselectunderstøttelsen...

> SELECT * FROM tabel1 WHERE email NOT EXISTS (SELECT email FROM
> tabel2)

....men ovenstående er forkert syntaks, uanset om EXISTS er
understøttet eller ej.

Enten skal der stå:

SELECT * FROM tabel1 WHERE NOT EXISTS (SELECT 1 FROM tabel2 INNER
JOIN tabel1 ON tabel2.email = tabel1.email)

- eller også skal der stå:

SELECT * FROM tabel1 WHERE email NOT IN (SELECT email FROM tabel2)
--
Jens Gyldenkærne Clausen
Velkommen hen til Paris International!
Rejse, lede og fortolkere. Jeres oven på- kø levere i Paris
nemlig... (<http://www.paris-tours-guides.com/index_danish.shtml>)

Henrik Stidsen (17-07-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 17-07-03 22:18

Jens Gyldenkærne Clausen <jens@gyros.invalid> wrote in
news:Xns93BBE238954DCjcdmfdk@gyrosmod.cybercity.dk

> SELECT * FROM tabel1 WHERE NOT EXISTS (SELECT 1 FROM tabel2 INNER
> JOIN tabel1 ON tabel2.email = tabel1.email)
>
> - eller også skal der stå:
>
> SELECT * FROM tabel1 WHERE email NOT IN (SELECT email FROM tabel2)

MySQL kan ikke lide dem alligevel - den understøtter ikke subselects
før 4.1 ifølge Mads Lie Jensen.

Jeg fandt en anden måde at gøre det på, fylder indtil videre "kun" 33
linier kode (PHP) og er sikkert ikke det mest optimale - men det
virker!

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
Nerd is a word only used by those who can’t pronounce ’Intellectual’.
- http://query.dk/permlink.php?link=1058129898

Peter Brodersen (17-07-2003)
Kommentar
Fra : Peter Brodersen


Dato : 17-07-03 22:20

On Thu, 17 Jul 2003 04:19:27 +0000 (UTC), Henrik Stidsen
<idontwantnospam@hs235.dk> wrote:

>Jeg skal have slettet nogle poster i en tabel hvor de ikke har et
>link til en given anden tabel.
>
>Hvordan klares det ? - i Oracle er det noget med (?) og IS NULL, men
>denne database er MySQL...

Intet problem! Med MySQL 4 kan man lave DELETE fra en tabel, med et
resultatsæt hen over flere tabeller. Det er dog en DELETE-syntaks, man
måske ikke er så vant til at se.
http://www.mysql.com/doc/en/DELETE.html

> SELECT * FROM t1;
+------+------+
| id | link |
+------+------+
| 1 | 1 |
| 2 | 20 |
| 3 | 100 |
| 4 | 101 |
+------+------+

> SELECT * FROM t2;
+------+
| id |
+------+
| 1 |
| 20 |
| 101 |
+------+

> SELECT t1.id, t2.id FROM t1 LEFT JOIN t2 ON t1.link = t2.id WHERE t2.id IS NULL;
+------+------+
| id | id |
+------+------+
| 3 | NULL |
+------+------+

Dvs. det er den, der skal slettes. Og nu i ét snuptag:

> DELETE t1 FROM t1 LEFT JOIN t2 ON t1.link = t2.id WHERE t2.id IS NULL;
Query OK, 1 row affected (0.05 sec)

Og for at bekræfte:

> SELECT * FROM t1;
+------+------+
| id | link |
+------+------+
| 1 | 1 |
| 2 | 20 |
| 4 | 101 |
+------+------+

... udført på en MySQL 4.0.13-server.

--
- Peter Brodersen

Henrik Stidsen (17-07-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 17-07-03 23:47

Peter Brodersen <usenet@ter.dk> wrote in
news:bf73uc$6mv$1@dknews.tiscali.dk

> Intet problem! Med MySQL 4 kan man lave DELETE fra en tabel, med
> et resultatsæt hen over flere tabeller. Det er dog en
> DELETE-syntaks, man måske ikke er så vant til at se.
> http://www.mysql.com/doc/en/DELETE.html

Ser ganske forfærdeligt avanceret ud :)

Jeg fandt en anden løsning - lidt mere PHP kodning og lidt flere SQL
request men samme resultat til sidst. Fylder omkring 35 linier PHP
kode...

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
Nerd is a word only used by those who can’t pronounce ’Intellectual’.
- http://query.dk/permlink.php?link=1058129898

Peter Brodersen (17-07-2003)
Kommentar
Fra : Peter Brodersen


Dato : 17-07-03 23:58

On Thu, 17 Jul 2003 22:47:15 +0000 (UTC), Henrik Stidsen
<idontwantnospam@hs235.dk> wrote:

>> Intet problem! Med MySQL 4 kan man lave DELETE fra en tabel, med
>> et resultatsæt hen over flere tabeller. Det er dog en
>> DELETE-syntaks, man måske ikke er så vant til at se.
>> http://www.mysql.com/doc/en/DELETE.html
>Ser ganske forfærdeligt avanceret ud :)

Løsningen er nu stadigvæk kun én simpel SQL-forespørgsel. Jeg synes
ikke at SELECT'en og DELETE'n ligger så langt fra hinanden:

> SELECT t1.id FROM t1 LEFT JOIN t2 ON t1.link = t2.id WHERE t2.id IS NULL;
> DELETE t1 FROM t1 LEFT JOIN t2 ON t1.link = t2.id WHERE t2.id IS NULL;

Det mest spøjse er måske at man angiver tabelnavn alene, allerede før
FROM-delen.

... og ja, LEFT JOIN .. IS NULL er rigtigt nok et typisk "mangel på
subselects"-stunt, men hvis man i forvejen er vant til MySQL, så bør
den notation ikke længere være så skræmmende :)

(ellers er det bare at vente til mysql 5.1, hvor der kommer
constraints, så man ikke i første omgang skal ud i en situation, hvor
man skal omgå subselects, for at blive fri for orphans... eller
noget...)

>Jeg fandt en anden løsning - lidt mere PHP kodning og lidt flere SQL
>request men samme resultat til sidst. Fylder omkring 35 linier PHP
>kode...

Yep, så at jeg kom et par minutter for sent.

--
- Peter Brodersen

Henrik Stidsen (18-07-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 18-07-03 02:04

Peter Brodersen <usenet@ter.dk> wrote in
news:bf79km$8fn$1@dknews.tiscali.dk

> .. og ja, LEFT JOIN .. IS NULL er rigtigt nok et typisk "mangel
> på subselects"-stunt, men hvis man i forvejen er vant til MySQL,
> så bør den notation ikke længere være så skræmmende :)

Er ikke vant til MySQL - det er første gang jeg skal lave noget i
MySQL hvor der indgår mere end en tabel.
Ellers er det Oracle jeg har arbejdet i - og den kan noget mere end
MySQL :)

>>Jeg fandt en anden løsning - lidt mere PHP kodning og lidt flere
>>SQL request men samme resultat til sidst. Fylder omkring 35
>>linier PHP kode...

> Yep, så at jeg kom et par minutter for sent.

Desværre - men vi kan jo ikke altid vinde :)

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
Nerd is a word only used by those who can’t pronounce ’Intellectual’.
- http://query.dk/permlink.php?link=1058129898

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste