[SQL] Problemen met inner join

Pagina: 1
Acties:

  • gvdh81
  • Registratie: Juli 2001
  • Laatst online: 13-08 18:15

gvdh81

To got or not to got..

Topicstarter
Hoi hoi ik heb 3 tabellen genaamd klant, veld en klantveld. De tabel klantveld is dus de koppeling tussen klant en veld, dwz dat een iedere klant aparte velden mag hebben.

Dit is mijn huidige innerjoin:
PHP:
1
2
3
4
$SQL = 'SELECT raveld.*, raklantveld.* FROM raveld ';
$SQL.= 'INNER JOIN raklantveld ON raveld.raveldid=';
$SQL.= 'raklantveld.raveldid WHERE raklantveld.raklantid=1';
$SQL.= 'ORDER BY raklantveld.positie ASC;';


Nu wil ik een selectie doen van alle records uit de tabel veld, die niet gekoppeld aan een klant. Ik neem aan dat ik de bestaande innerjoin moet wijzigen maar ik weet even niet op welke manier.

[ Voor 56% gewijzigd door gvdh81 op 03-04-2003 12:05 . Reden: code ff verdeeld over 4 regels ivm layout verneukeratiefjes ]


  • MPEG
  • Registratie: Oktober 2000
  • Laatst online: 21-10-2020
Is het niet INNER LEFT JOIN ?

AMD 64 X2 4800+ @2,41Ghz,
2048MB DDRRAM,
ATI X800GTO,
2x Samsung 930BF 19" TFT


  • gvdh81
  • Registratie: Juli 2001
  • Laatst online: 13-08 18:15

gvdh81

To got or not to got..

Topicstarter
Nope, want deze code werkt..

p.s. inner join, inner left join, outer join al geprobeerd.

[ Voor 53% gewijzigd door gvdh81 op 03-04-2003 12:09 ]


  • MPEG
  • Registratie: Oktober 2000
  • Laatst online: 21-10-2020
Sorry, verkeerd gelezen :)

SELECT * from raveld where raklantid not in (select id (?) from raklant)

Zoiets misschien?

AMD 64 X2 4800+ @2,41Ghz,
2048MB DDRRAM,
ATI X800GTO,
2x Samsung 930BF 19" TFT


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Je zult met een subquery moeten werken, zoals CyrusTheVirus al voortoont.
Echter, als je met MySQL werkt, kan je dat niet doen, aangezien MySQL geen subqueries ondersteunt.
Er is echter een workaround voor die hier op GoT al eens gepost werd....
Hier bv:
[rml]Cheatah in "[ SQL] Tegenovergestelde van een join"[/rml]

https://fgheysels.github.io/


  • gvdh81
  • Registratie: Juli 2001
  • Laatst online: 13-08 18:15

gvdh81

To got or not to got..

Topicstarter
Ok, dus dan zou ik zoiets krijgen:

SELECT * from raveld LEFT OUTER JOIN raklantveld ON raveld.raveldid=raklantveld.raveldid where raklantveld.raklantid IS NULL;

Maar als ik mijn MySQL een beetje ken, geeft dit dus alle records terug vanuit de tabel raveld die aan geen enkele klant zijn gekoppeld. En ik wil alleen de records uit raveld die niet aan klantid = 1 zijn gekoppeld.

Als ik echter de query zo wijzig dat hij <>1 ipv IS NULL is, dan krijg ik een empty set terug.

[ Voor 86% gewijzigd door gvdh81 op 03-04-2003 12:24 ]


  • gvdh81
  • Registratie: Juli 2001
  • Laatst online: 13-08 18:15

gvdh81

To got or not to got..

Topicstarter
Hey.. volgens mij is hem dit:

SELECT raveld.*, raklantveld.* FROM raveld LEFT OUTER JOIN raklantveld ON raveld.raveldid=raklantveld.raveldid WHERE raklantveld.raveldid IS NULL

Deze geeft het goede resultaat terug.. Klopt deze query volgens jullie insteek?

  • MPEG
  • Registratie: Oktober 2000
  • Laatst online: 21-10-2020
Lijkt me een goede query, zou hem alleen ff uitvoerig testen of deze i.d.d. altijd het goede resultaat geeft.

AMD 64 X2 4800+ @2,41Ghz,
2048MB DDRRAM,
ATI X800GTO,
2x Samsung 930BF 19" TFT


  • gvdh81
  • Registratie: Juli 2001
  • Laatst online: 13-08 18:15

gvdh81

To got or not to got..

Topicstarter
bout deze geeft dus het zelfde resultaat terug als de query van cheetah ;)

Wat ik dus wil is:
raveld
raklantveld

selecteer alle records van raveld die geen koppeling hebben via raklantveld aan de hand van het veld raveldid als raklantid 1 is..

Of is dit te moeilijk?

Dit zijn mijn tabellen:

raveld:
CREATE TABLE `raveld` (
`raveldid` int(11) NOT NULL auto_increment,
`veldnaam` varchar(100) NOT NULL default '''''',
`veldomschrijving` varchar(100) NOT NULL default '''''',
PRIMARY KEY (`raveldid`)
) TYPE=MyISAM;

raklantveld:
CREATE TABLE `raklantveld` (
`raklantveldid` int(11) NOT NULL auto_increment,
`raklantid` int(11) NOT NULL default '0',
`raveldid` int(11) NOT NULL default '0',
`positie` int(11) NOT NULL default '0',
PRIMARY KEY (`raklantveldid`)
) TYPE=MyISAM;

[ Voor 84% gewijzigd door gvdh81 op 03-04-2003 12:51 ]


  • gvdh81
  • Registratie: Juli 2001
  • Laatst online: 13-08 18:15

gvdh81

To got or not to got..

Topicstarter
hmm ik heb het opgelost met een IN () functie..
Pagina: 1