【发布时间】:2015-12-31 05:32:01
【问题描述】:
我真的没有发现为什么 left join 不会返回 t1 的所有行。请任何帮助将不胜感激。
t1 架构:
CREATE TABLE `tbl_assigned` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Round` int(2) NOT NULL,
`TraineeID` varchar(7) NOT NULL,
`Name` varchar(25) NOT NULL,
`Mobile` int(10) DEFAULT NULL,
`BatchID` varchar(35) NOT NULL,
`Remarks` varchar(8) DEFAULT NULL,
`District` varchar(15) DEFAULT NULL,
`Comments` varchar(21) DEFAULT NULL,
`Level` varchar(2) DEFAULT NULL,
`Trade` int(1) DEFAULT NULL,
`Status` int(1) DEFAULT NULL,
`Photo` varchar(50) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `TraineeID` (`TraineeID`)
) ENGINE=InnoDB AUTO_INCREMENT=356 DEFAULT CHARSET=utf8
t2 架构:
CREATE TABLE `tbl_attn_temp` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`TraineeID` varchar(7) NOT NULL,
`ScannerID` int(7) NOT NULL,
`attnDate` date NOT NULL,
`attnTime` time NOT NULL,
`Status` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2135 DEFAULT CHARSET=latin1
查询:
SELECT t1.TraineeID, t2.attnDate
FROM tbl_assigned t1
LEFT JOIN tbl_attn_temp t2 on t1.TraineeID=t2.TraineeID
WHERE t1.BatchID='ID-Welding/SSTS-01M/R7/01' and t2.attnDate='2015-12-28'
输出:
TID attnDate
15950 2015-12-28
24310 2015-12-28
24317 2015-12-28
24327 2015-12-28
24400 2015-12-28
24973 2015-12-28
25186 2015-12-28
25281 2015-12-28
25285 2015-12-28
25300 2015-12-28
但 t1 表有 15 个符合此条件的 TraineeID。
SELECT t1.TraineeID FROM tbl_assigned t1 WHERE t1.BatchID='ID-Welding/SSTS-01M/R7/01'
输出:
15950
20012
21173
24310
24317
24327
24400
24936
24973
25033
25186
25281
25282
25285
25300
SELECT t2.TraineeID, t2.attnDate FROM tbl_attn_temp t2 WHERE t2.attnDate='2015-12-28'
输出:
ID Date
SSTS001 2015-12-28
SSTS001 2015-12-28
SSTS001 2015-12-28
15950 2015-12-28
24317 2015-12-28
24738 2015-12-28
25186 2015-12-28
25281 2015-12-28
24973 2015-12-28
24310 2015-12-28
24400 2015-12-28
24327 2015-12-28
25300 2015-12-28
25285 2015-12-28
SSTS002 2015-12-28
28702 2015-12-28
28702 2015-12-28
22934 2015-12-28
26620 2015-12-28
24068 2015-12-28
21343 2015-12-28
1151467 2015-12-28
24931 2015-12-28
24931 2015-12-28
24931 2015-12-28
4872 2015-12-28
24071 2015-12-28
24786 2015-12-28
6203 2015-12-28
24069 2015-12-28
【问题讨论】:
-
你的预期结果是什么?
-
您的预期行是否被
WHERE子句过滤掉以寻找t2.attnDate='2015-12-28'? -
where 子句将过滤结果。
t1.BatchID='ID-Welding/SSTS-01M/R7/01' -
删除条件
t1.BatchID='ID-Welding/SSTS-01M/R7/01'然后你就可以得到你期望的输出 -
@ChrisNauroth- 是的,先生,
t2.attnDate='2015-12-28'过滤掉了预期的结果。
标签: mysql