[(my)sql]Records selecteren die niet gekoppelt zijn

Pagina: 1
Acties:
  • 121 views sinds 30-01-2008
  • Reageer

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Ik heb twee tabellen en een koppel tabel daartussen. Nu wil ik uit tabel 1 alle records die niet via de koppel tabel zijn gekoppeld aan een bepaalde record uit tabel 2. Van tabel 2 heb ik dus een ID beschikbaar en wil ik alle records selecteren uit tabel 1 die daar niet aan gekoppeld zijn.

Ik heb even zitten knutselen met SQL maar ik kom er niet echt helemaal uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
    t1.*
FROM
    t1_t2,
    t1
LEFT JOIN
    t2
ON
    t1.id = t1_t2.t1_id
AND
    t2.id = t1_t2.t2_id
AND
    t2.id = <gekozen-id>
WHERE
    t2.id = null


Dit werkt dus niet. Wat doe ik fout? Ik werk met MySQL versie 3.23.54 dus subqueries zijn geen optie. Is het op te lossen op deze manier of moet ik handmatig gaan filteren?

Noushka's Magnificent Dream | Unity


  • Dr. Donald
  • Registratie: December 2003
  • Laatst online: 15:51
code:
1
2
3
4
5
6
7
  tabel 1              koppel         tabel 2
  id   data         tbl1  tbl2      id  data
-------------      -----------     ----------
| 1 | data  |     |  1  |  1  |   | 1 | data |
| 2 | data  |     |  1  |  3  |   | 2 | data |
| 3 | data  |     |  2  |  2  |   | 3 | data |
-------------      -----------     ----------

code:
1
2
3
SELECT tabel1.*
FROM tabel1 AS t1, koppel AS ko
WHERE t1.id != ko.tbl1;

edit:
Kan ook zijn dat de != NOT IN moet zijn, dat weet ik zo niet meer..

[ Voor 10% gewijzigd door Dr. Donald op 21-12-2004 12:29 ]


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Nee dat gaat niet werken, omdat records uit tabel 1 ook gekoppeld kunnen zijn aan andere records uit tabel 2. Nu zou hij ook die records niet selecteren.

Noushka's Magnificent Dream | Unity


  • Dr. Donald
  • Registratie: December 2003
  • Laatst online: 15:51
Hij selecteerd nu alle records uit tabel 1 die niet gekoppeld zijn aan tabel 2.
Maar nu ik je vraag nog een keer lees begrijp ik dat jij wilt alle records uit tabel 1 wilt selecteren die niet gekoppeld zijn aan een record in tabel 2?

code:
1
2
3
4
SELECT tabel1.*
FROM tabel1 AS t1, koppel AS ko
WHERE t1.id != ko.tbl1
AND ko.tbl2 = waarde;

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
code:
1
2
3
4
SELECT Tabel1.*
FROM Tabel1 t1
LEFT OUTER JOIN Koppel K ON t1.id = k.tbl1id
WHERE k.tbl1id IS NULL


Dat geeft je alle records uit tabel 1 die niet in de koppeltabel voorkomen.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Dr. Donald schreef op dinsdag 21 december 2004 @ 13:02:
Hij selecteerd nu alle records uit tabel 1 die niet gekoppeld zijn aan tabel 2.
Maar nu ik je vraag nog een keer lees begrijp ik dat jij wilt alle records uit tabel 1 wilt selecteren die niet gekoppeld zijn aan een record in tabel 2?

code:
1
2
3
4
SELECT tabel1.*
FROM tabel1 AS t1, koppel AS ko
WHERE t1.id != ko.tbl1
AND ko.tbl2 = waarde;
Perfect! _/-\o_

Edit: Alleen werkt het niet als er geen record uit tabel 1 gelinkt is aan dat record uit tabel 2.

[ Voor 11% gewijzigd door Michali op 21-12-2004 14:28 ]

Noushka's Magnificent Dream | Unity

Pagina: 1