我有这三个主表 Microdisenos ,竞争能力和结果。
我的问题是:我想知道属于 microdisenos 的 competencias 的 resultados 。
我知道当关系是一对多时该怎么做,但是在这种情况下,关系是一对多的,我不知道如何处理那些中间表。
感谢您的帮助。
答案 0 :(得分:1)
唯一的方法是在所有列中进行联接:
SELECT * (or whatever you need)
FROM resultados r
INNER JOIN competencia_resultado cr
ON r.id = cr.resultado_id
INNER JOIN cometencias c
ON c.id = cr.cometencia_id
INNER JOIN competencia_microdisendo cm
ON c.id = cm.competencia_id
INNER JOIN microdisendos m
ON m.id = cm.microdisendo_id
如果只想选择一个特定的微脱氧核糖核酸之一,则在WHERE子句中添加m.id
答案 1 :(得分:1)
CREATE DATABASE testDB;
USE testDB;
CREATE TABLE microdisenos (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
description VARCHAR(255),
PRIMARY KEY (id)
);
CREATE TABLE competencias (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
modulo VARCHAR(128),
PRIMARY KEY (id)
);
CREATE TABLE competencia_microdiseno (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
microdiseno_id INTEGER UNSIGNED,
competencia_id INTEGER UNSIGNED,
PRIMARY KEY (id),
FOREIGN KEY (microdiseno_id) REFERENCES microdisenos (id),
FOREIGN KEY (competencia_id) REFERENCES competencias (id)
);
CREATE TABLE resultados (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
description VARCHAR(256),
PRIMARY KEY (id)
);
CREATE TABLE competencia_resultado(
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
resultado_id INTEGER UNSIGNED,
competencia_id INTEGER UNSIGNED,
PRIMARY KEY (id),
FOREIGN KEY (resultado_id) REFERENCES resultados (id),
FOREIGN KEY (competencia_id) REFERENCES competencias (id)
);
INSERT INTO competencias VALUES (0, 'Compentencia AA');
INSERT INTO competencias VALUES (0, 'Compentencia BB');
INSERT INTO competencias VALUES (0, 'Compentencia CC');
INSERT INTO competencias VALUES (0, 'Compentencia DD');
INSERT INTO competencias VALUES (0, 'Compentencia EE');
INSERT INTO microdisenos VALUES (0, 'Microdisenos 101');
INSERT INTO microdisenos VALUES (0, 'Microdisenos 202');
INSERT INTO microdisenos VALUES (0, 'Microdisenos 303');
INSERT INTO microdisenos VALUES (0, 'Microdisenos 404');
INSERT INTO microdisenos VALUES (0, 'Microdisenos 505');
INSERT INTO resultados VALUES (0, 'Resultados 11');
INSERT INTO resultados VALUES (0, 'Resultados 22');
INSERT INTO resultados VALUES (0, 'Resultados 33');
INSERT INTO resultados VALUES (0, 'Resultados 44');
INSERT INTO resultados VALUES (0, 'Resultados 55');
INSERT INTO competencia_microdiseno VALUES(0, 1, 1);
INSERT INTO competencia_microdiseno VALUES(0, 1, 2);
INSERT INTO competencia_microdiseno VALUES(0, 1, 3);
INSERT INTO competencia_microdiseno VALUES(0, 2, 4);
INSERT INTO competencia_microdiseno VALUES(0, 2, 5);
INSERT INTO competencia_microdiseno VALUES(0, 3, 1);
INSERT INTO competencia_microdiseno VALUES(0, 3, 2);
INSERT INTO competencia_microdiseno VALUES(0, 4, 3);
INSERT INTO competencia_microdiseno VALUES(0, 4, 4);
INSERT INTO competencia_microdiseno VALUES(0, 4, 5);
INSERT INTO competencia_microdiseno VALUES(0, 5, 1);
INSERT INTO competencia_microdiseno VALUES(0, 5, 2);
INSERT INTO competencia_microdiseno VALUES(0, 5, 3);
INSERT INTO competencia_resultado VALUES(0, 1, 1);
INSERT INTO competencia_resultado VALUES(0, 2, 2);
INSERT INTO competencia_resultado VALUES(0, 3, 3);
INSERT INTO competencia_resultado VALUES(0, 4, 4);
INSERT INTO competencia_resultado VALUES(0, 5, 5);
INSERT INTO competencia_resultado VALUES(0, 1, 1);
INSERT INTO competencia_resultado VALUES(0, 2, 2);
INSERT INTO competencia_resultado VALUES(0, 3, 3);
INSERT INTO competencia_resultado VALUES(0, 4, 4);
INSERT INTO competencia_resultado VALUES(0, 5, 5);
INSERT INTO competencia_resultado VALUES(0, 1, 1);
INSERT INTO competencia_resultado VALUES(0, 2, 2);
INSERT INTO competencia_resultado VALUES(0, 3, 3);
-- Give me all (unique) Resultados for Compentencias for given Microdisenos
SELECT DISTINCT r.*
FROM resultados r, competencia_resultado cr, competencias c, competencia_microdiseno cm, microdisenos m
WHERE r.id = cr.resultado_id
AND c.id = cr.competencia_id
AND c.id = cm.competencia_id
AND m.id = cm.microdiseno_id
AND m.description = "Microdisenos 303";
结果将是:
# id, description
---- ---------------
1, Resultados 11
2, Resultados 22
选项2: 子查询
SELECT DISTINCT r.*
FROM resultados r
WHERE r.id IN ( SELECT DISTINCT cr.id
FROM competencia_resultado cr
WHERE cr.competencia_id IN (
SELECT DISTINCT c.id
FROM competencias c
WHERE c.id IN (
SELECT DISTINCT cm.competencia_id
FROM competencia_microdiseno cm, microdisenos m
WHERE m.id = cm.microdiseno_id
AND m.description = "Microdisenos 303" )
)
);