0

我有一个简单的技术人员考勤系统。参加的天数存储在名为 tech_logins 的表中。每个技术人员每个日期有 1 条记录。技术人员执行的工作存储在称为日志的表中。此表包含技术人员完成的所有工作。它还有两个与 tech_logins 表相关的字段。它们称为technical_id 和dos。

日志表可以包含链接到技术人员但dos 未链接的工作,即当有人为技术人员输入工作但在技术人员不在的日期(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;
4

2 回答 2

2

您的查询结构显示正确。您可能遇到数据问题,即两个表中的数据在您的两个连接列上实际上并没有正确匹配。

您为什么不尝试分别选择一小组两列,首先从 tech_logins 中选择。然后使用从 tech_logins 返回的几行的两列查询日志表。一步一步,你会找到你的答案。您正在正确执行 sql。

于 2013-03-08T01:46:23.563 回答
-1

更改日期加入以下

 DATE_FORMAT( tech_logins.login_date, '%d %m     %Y')
 = DATE_FORMAT( 'logs'.dos, '%d %m %Y')

更新如果这不起作用,则将内部联接替换为左联接只是为了检查是否存在任何日期问题。

于 2013-03-08T01:59:36.377 回答