我对技术人员有一个简单的考勤系统。出席的天数存储在一个名为tech_logins的表中。每个技术员每天都有一条记录。技术人员执行的作业存储在一个名为logs的表中。此表包含技术人员完成的所有工作。它还有两个与tech_logins表相关的字段。它们被称为technician_id和dos。
日志表可以包含链接到该技术人员但未链接to的职务,即,当某人为该技术人员输入工作时,但在该技术人员不在的日期( dos )。
我正在尝试获取所有工作,仅针对与tech_logins表中的login_date链接的dos日期的每个技术人员。此sql仅返回单个技术人员和单个日期的记录:
SELECT tech_logins.tech_id,
tech_logins.login_date
FROM tech_logins
INNER JOIN `logs`
ON tech_logins.login_date = `logs`.dos
AND tech_logins.tech_id = `logs`.technician_id 任何帮助或指南都将非常感谢。
表结构:
CREATE TABLE `tech_logins` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tech_id` int(10) DEFAULT NULL,
`login_date` date DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `tech_id` (`tech_id`,`login_date`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
CREATE TABLE `logs` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`completed` date DEFAULT NULL,
`patient_first_name` varchar(20) NOT NULL,
`patient_last_name` varchar(20) NOT NULL,
`dob` date DEFAULT NULL,
`sex` varchar(1) DEFAULT NULL,
`dos` date DEFAULT NULL,
`study_id` int(10) DEFAULT NULL,
`ICD9` varchar(10) DEFAULT NULL,
`ref_doctor_id` int(10) DEFAULT NULL,
`insurance_id` int(10) DEFAULT NULL,
`insurance_no` varchar(20) DEFAULT NULL,
`authorization_no` varchar(20) DEFAULT NULL,
`referral_no` varchar(20) DEFAULT NULL,
`location_id` int(10) DEFAULT NULL,
`reading_doctor_id` int(10) DEFAULT NULL,
`technician_id` int(10) NOT NULL,
`biller` int(10) DEFAULT NULL,
`billed` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=79 DEFAULT CHARSET=latin1;发布于 2013-03-08 09:46:24
您的查询结构似乎是正确的。您可能会遇到数据问题,两个表中的数据在您的两个连接列上实际上并不匹配。
为什么不尝试分别从两列中选择一小部分,首先从tech_logins中选择。然后使用从tech_logins返回的几行中的两列查询日志表。一步一步来,你会找到答案的。您的sql操作是正确的。
发布于 2013-03-08 09:59:36
更改日期与以下联接
DATE_FORMAT( tech_logins.login_date, '%d %m %Y')
= DATE_FORMAT( 'logs'.dos, '%d %m %Y')如果这不起作用,请更新,而不是将inner join替换为left join,以检查是否有任何日期问题。
https://stackoverflow.com/questions/15285275
复制相似问题