quarkfrosch
Grünschnabel
MYSQL JOIN <:> haupt mit mehreren subtables bei versch. anzahl von subtable einträgen
ok ich habe folgendes problem
ich habe 4 tabellen die ich wie folgt joinen möchte main,sub1,sub2,sub3
wie man sieht gibt es 3 verschiedene zustände
1. 1 result z.b. main.id = 2 && sub1.main.id = 2
2. mehr als 1 result z.b. main.id = 1 && sub1.main_id = 1 (reihe 1,2 of table sub1)
3. kein result z.b main.id = 5|6 or main.id = ""
ich hatte folgendes versucht:
ich bekomme kein result weil ja nicht alle subs 1 main zugeordnet sind
hier der versuch mit OR
wie man sieht gibt er zwar ein result aus füllt auch subfelder aus aber in allen reihen die selben werte und so wollte ich das net
ich bräuchte ein result wie das hier >
hier der SQL dump für die dies testen wollen...
ok ich habe folgendes problem
ich habe 4 tabellen die ich wie folgt joinen möchte main,sub1,sub2,sub3
Code:
table main:
id name blubb
1 mainentry 1 jaha
2 mainentry 2 juhu
3 mainentry 3 joho
4 mainentry 4 hehe
5 mainentry 5 jodilo
6 mainentry 6 juhuhuhu
table sub1
id main_id name
1 1 sub1->main1
2 1 sub1->main1
3 2 sub1->main2
table sub2
id main_id name
1 1 sub2->main3
table sub3
id main_id name
1 4 sub3->main4
2 0 sub3->nomain
1. 1 result z.b. main.id = 2 && sub1.main.id = 2
2. mehr als 1 result z.b. main.id = 1 && sub1.main_id = 1 (reihe 1,2 of table sub1)
3. kein result z.b main.id = 5|6 or main.id = ""
ich hatte folgendes versucht:
Code:
mysql>
SELECT main.id, main.name, main.blubb, sub1.id AS sub1id, sub1.name AS sub1name, sub2.id AS sub2id, sub2.name AS sub2name, sub3.id AS sub3id, sub3.name AS sub3name
FROM main, sub1, sub2, sub3
WHERE 1 AND sub1.main_id = main.id AND sub2.main_id = main.id AND sub3.main_id = main.id
GROUP BY main.id
result> keins
ich bekomme kein result weil ja nicht alle subs 1 main zugeordnet sind
hier der versuch mit OR
Code:
mysql>
SELECT main.id, main.name, main.blubb, sub1.id AS sub1id, sub1.name AS sub1name, sub2.id AS sub2id, sub2.name AS sub2name, sub3.id AS sub3id, sub3.name AS sub3name
FROM main, sub1, sub2, sub3
WHERE 1 OR sub1.main_id = main.id OR sub2.main_id = main.id OR sub3.main_id = main.id
GROUP BY main.id
result >
id name blubb sub1id sub1name sub2id sub2name sub3id sub3name
1 mainentry 1 jaha 1 sub1->main1 1 sub2->main3 1 sub1->main4
2 mainentry 2 juhu 1 sub1->main1 1 sub2->main3 1 sub1->main4
3 mainentry 3 joho 1 sub1->main1 1 sub2->main3 1 sub1->main4
4 mainentry 4 hehe 1 sub1->main1 1 sub2->main3 1 sub1->main4
5 mainentry 5 jodilo 1 sub1->main1 1 sub2->main3 1 sub1->main4
6 mainentry 6 juhuhuhu 1 sub1->main1 1 sub2->main3 1 sub1->main4
ich bräuchte ein result wie das hier >
Code:
id name blubb sub1id sub1name sub2id sub2name sub3id sub3name
1 mainentry 1 jaha 1 sub1->main1 NULL NULL NULL NULL
2 mainentry 2 juhu 3 sub1->main2 NULL NULL NULL NULL
3 mainentry 3 joho NULL NULL 1 sub2->main NULL NULL
4 mainentry 4 hehe NULL NULL NULL NULL 1 sub3->main4
5 mainentry 5 jodilo NULL NULL NULL NULL NULL NULL
6 mainentry 6 juhuhuhu NULL NULL NULL NULL NULL
hier der SQL dump für die dies testen wollen...
Code:
CREATE TABLE `main` (
`id` int(5) NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '',
`blubb` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=7 ;
CREATE TABLE `sub1` (
`id` int(5) NOT NULL auto_increment,
`main_id` int(5) NOT NULL default '0',
`name` varchar(50) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;
CREATE TABLE `sub2` (
`id` int(5) NOT NULL auto_increment,
`main_id` int(5) NOT NULL default '0',
`name` varchar(55) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
CREATE TABLE `sub3` (
`id` int(5) NOT NULL auto_increment,
`main_id` int(5) NOT NULL default '0',
`name` varchar(50) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;
INSERT INTO `main` VALUES (1, 'mainentry 1', 'jaha');
INSERT INTO `main` VALUES (2, 'mainentry 2', 'juhu');
INSERT INTO `main` VALUES (3, 'mainentry 3', 'joho');
INSERT INTO `main` VALUES (4, 'mainentry 4', 'hehe');
INSERT INTO `main` VALUES (5, 'mainentry 5', 'jodilo');
INSERT INTO `main` VALUES (6, 'mainentry 6', 'juhuhuhu');
INSERT INTO `sub1` VALUES (1, 1, 'sub1->main1');
INSERT INTO `sub1` VALUES (2, 1, 'sub1->main1');
INSERT INTO `sub1` VALUES (3, 2, 'sub1->main2');
INSERT INTO `sub2` VALUES (1, 1, 'sub2->main3');
INSERT INTO `sub3` VALUES (1, 4, 'sub1->main4');
Zuletzt bearbeitet: