我正试着把四张桌子连接起来。
registration_mt,admission_mt,student_mt和schoolyear_student_lt
目前,registration_mt、admission_mt和student_mt表都有1记录。除了还没有记录的的 for schoolyear_student_lt之外,内部连接所有这三个方面都没有问题。
我希望能够获得schoolyear_student_lt的列,并将其与其他3个表的结果集连接,即使匹配的student_id 有或有--没有记录。
我想将schoolyear_student_lt中的schoolyear_id、student_id、gradelevel_id、section_id、passed添加到我从join查询where isActive = 0获得的结果集中;
CREATE表语句
CREATE TABLE `registration_mt` (
`registration_id` int(11) NOT NULL AUTO_INCREMENT,
`student_type` varchar(45) NOT NULL,
PRIMARY KEY (`registration_id`)
) ;
CREATE TABLE `admission_mt` (
`admission_id` int(11) NOT NULL AUTO_INCREMENT,
`registration_id` int(11) NOT NULL,
`isComplete` bit(1) NOT NULL DEFAULT b'0',
`completion_date` datetime DEFAULT NULL,
PRIMARY KEY (`admission_id`),
UNIQUE KEY `registration_id_UNIQUE` (`registration_id`),
CONSTRAINT `fk_admission_mtTABLE_registration_idCOL` FOREIGN KEY (`registration_id`) REFERENCES `registration_mt` (`registration_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ;
CREATE TABLE `schoolyear_student_lt` (
`schoolyear_id` int(11) NOT NULL,
`student_id` int(11) NOT NULL,
`gradelevel_id` int(11) NOT NULL,
`section_id` int(11) DEFAULT NULL,
`passed` bit(1) DEFAULT b'0',
UNIQUE KEY `uk_schoolyear_idCOL_student_idCOL` (`schoolyear_id`,`student_id`)
);
CREATE TABLE `student_mt` (
`student_id` int(11) NOT NULL AUTO_INCREMENT,
`registration_id` int(11) NOT NULL,
`entry_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`isGraduated` bit(1) NOT NULL DEFAULT b'0',
`date_graduated` datetime DEFAULT NULL,
`isActive` bit(1) DEFAULT b'0' ,
PRIMARY KEY (`student_id`),
UNIQUE KEY `registration_id_UNIQUE` (`registration_id`),
KEY `fk_student_mtTABLE_registration_idCOL_idx` (`registration_id`),
CONSTRAINT `fk_student_mtTABLE_registration_idCOL` FOREIGN KEY (`registration_id`) REFERENCES `registration_mt` (`registration_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
);我的INNER-JOIN语句
SELECT
a.admission_id,
a.isComplete,
a.completion_date,
s.student_id,
s.entry_date,
s.isGraduated,
s.date_graduated,
s.isActive
FROM admission_mt a
INNER JOIN registration_mt r ON a.registration_id = r.registration_id
INNER JOIN student_mt s ON s.registration_id = a.registration_id
-- INNER JOIN schoolyear_student_lt sslt ON s.student_id = sslt.student_id
-- LEFT JOIN schoolyear_student_lt sslt ON s.student_id = sslt.student_id
WHERE
s.isActive = 0 ;registration_mt,admission_mt,和student_mt表的INSERT语句
START TRANSACTION;
INSERT INTO registration_mt(student_type) VALUES('New'); -- insert to registration_mt
INSERT INTO admission_mt(registration_id)
VALUES(LAST_INSERT_ID()); --insert to admissiont_mt
COMMIT;
START TRANSACTION;
UPDATE admission_mt
SET isComplete = 1
WHERE registration_id = 1;
INSERT INTO student_mt(registration_id)
VALUES(1); --insert to student_mt
COMMIT;我注释掉了-- INNER JOIN schoolyear_student_lt sslt ON s.student_id = sslt.student_id,因为当我在select查询中包含它时,没有得到任何结果,因为-- INNER JOIN schoolyear_student_lt sslt ON s.student_id = sslt.student_id表中还没有记录。
这是我得到的当前结果集。schoolyear_student_lt表中没有列,即使在NULL和schoolyear_student_lt.student_id上的NOT NULL中,也不希望添加这些列
当schoolyear_student_lt时LEFT-JOIN不显示来自NULL的列
谢谢。

发布于 2017-02-28 10:20:14
https://stackoverflow.com/questions/42505948
复制相似问题