|
| [mysql 3.23.38-nt] reference til "oversætt~ Fra : Jesper Stocholm |
Dato : 04-02-03 18:00 |
|
Jeg mener, at der på et tidspunkt i denne gruppe er blevet postet et link
til en side, hvor der listes en række af de std-problemer med kan komme
ud for, når man skal omskrive fx sql med nestede selects til mysql-SQL.
Er der nogen af jer, der ligger inde med et sådant link ?
Grunden til at jeg spørger er, at jeg pt sidder og omskriver en lang
række SQL-forespørgsler fra Access til mySQL, og jeg er ved at få grå hår
i hovedet over det. Fx skal jeg kunne følgende:
Tabel1
| id | Navn |
------------
1 Jens
2 Ib
3 Hans
Tabel 2
| andet_id | id |
-----------------
1 1
2 1
3 2
4 2
5 1
Jeg vil gerne kunne udtrække navn + id i tabel1, hvor der ikke findes en
tilhørende række i tabel2. Resultatet bør altså være
| id | Navn |
-------------
3 Hans
Mit problem er jo, at jeg ikke kan bruge WHERE tabel1.id NOT IN (SELECT
table2.id FROM table2)
--
Jesper Stocholm - http://stocholm.dk
** Vil det sige, at ham Lars er et stort brød på 15 år ? **
Svar venligst til gruppen og ikke til mig privat !
Skriv under det du svarer på - www.usenet.dk/netikette/citatteknik.html
| |
Peter Brodersen (04-02-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 04-02-03 21:31 |
|
On Tue, 4 Feb 2003 17:00:01 +0000 (UTC), Jesper Stocholm
<skal.du.absolut.vise.min.emailadresse.ved.svar@stocholm.invalid>
wrote:
>Mit problem er jo, at jeg ikke kan bruge WHERE tabel1.id NOT IN (SELECT
>table2.id FROM table2)
Endnu engang kan du bruge JOINs.
Du skal bare LEFT JOIN'e tabel2 på tabel1, og hive alle rækker ud,
hvor tabel2's andet_id er NULL.
Fx:
mysql> CREATE TABLE tabel1 (id INT, navn TINYTEXT);
mysql> CREATE TABLE tabel2 (andet_id INT, id INT);
mysql> INSERT INTO tabel1 VALUES (1,'Jens'),(2,'Ib'),(3,'Hans');
mysql> INSERT INTO tabel2 VALUES (1,1),(2,1),(3,2),(4,2),(5,1);
mysql> SELECT tabel1.id, tabel1.navn FROM tabel1 LEFT JOIN tabel2 ON
tabel1.id = tabel2.id WHERE tabel2.andet_id IS NULL;
+------+------+
| id | navn |
+------+------+
| 3 | Hans |
+------+------+
1 row in set (0.00 sec)
--
- Peter Brodersen
| |
Jesper Stocholm (05-02-2003)
| Kommentar Fra : Jesper Stocholm |
Dato : 05-02-03 12:54 |
|
Peter Brodersen wrote :
> On Tue, 4 Feb 2003 17:00:01 +0000 (UTC), Jesper Stocholm
> <skal.du.absolut.vise.min.emailadresse.ved.svar@stocholm.invalid>
> wrote:
>
>>Mit problem er jo, at jeg ikke kan bruge WHERE tabel1.id NOT IN (SELECT
>>table2.id FROM table2)
>
> Endnu engang kan du bruge JOINs.
>
> Du skal bare LEFT JOIN'e tabel2 på tabel1, og hive alle rækker ud,
> hvor tabel2's andet_id er NULL.
> mysql> SELECT tabel1.id, tabel1.navn FROM tabel1 LEFT JOIN tabel2 ON
> tabel1.id = tabel2.id WHERE tabel2.andet_id IS NULL;
mange tak ... jeg kan se, at jeg nok er blevet "for meget" mærket af
udelukkende at have skrevet sql til Access, MSSQL,Teradata etc i længere
tid. Derfor skal jeg lige mentalt indstille mig på at have fremgravet
finterne med null-felter i (OUTER) JOINS i modsætning til de nestede
selects kombineret med IN-operatoren etc.
--
Jesper Stocholm
http://stocholm.dk
Copenhagen, Denmark
| |
Jesper Stocholm (20-02-2003)
| Kommentar Fra : Jesper Stocholm |
Dato : 20-02-03 21:54 |
| | |
|
|