2013-03-08 59 views
0

我为技术人员提供了一个简单的考勤系统。参加的天数存储在名为tech_logins的表中。每个技术员每个日期有1条记录。技术人员执行的工作存储在一个称为日志的表格中。该表包含技术人员完成的所有工作。它还有两个与tech_logins表相关的字段。他们被称为technician_id和dos。MySql select query join not given expected answer

日志表可以包含链接到技术人员的作业,但是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; 
+1

您的描述有点难以遵循。请发布您的“CREATE TABLE”语句以获取相关表格。 – 2013-03-08 01:42:54

+1

数据样本以及您期望返回结果集的内容会很有帮助。 – 2013-03-08 01:47:13

回答

2

您所查询的结构似乎是正确的。您可能遇到数据问题,即两个表中的数据在您的两个连接列中实际上不能正确匹配。

为什么不尝试从tech_logins首先单独选择两列中的一小部分。然后使用tech_logins返回的几行中的两列来查询日志表。一次一步,你会找到你的答案。你正在做的SQL正确。

+0

同意存在数据问题;表格结构也有点偏离。这些表格之间的FK应该仅在'ID'上。 – 2013-03-08 02:01:31

+0

链接的字段看起来很好。该ID应该是FK,但需要使用login_date和tech_id。 – Saseow 2013-03-08 02:08:07

+0

嗯,这是问题:tech_logins表每个技术人员每天只有1条记录。日志表可能每个技术人员每天有多个日志。此外,日志表可能包含技术人员在技术人员不在的那一天由后勤人员输入的记录。因此,日志表中的dos的tech_logins中没有条目。 – Saseow 2013-03-08 02:14:25

-1

更改日期与以下

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

更新 加入如果这不起作用比替换左连接只是为了检查是否有任何问题的日期内连接。

+0

格式化日期给出了语法错误:SELECT tech_logins.tech_id, tech_logins.login_date FROM tech_logins INNER JOIN'logs' ON tech_logins.tech_id ='logs'.technician_id AND DATE_FORMAT(tech_logins.login_date,“%d%米%Y')= DATE_FORMAT('logs'.dos,'%d%m%Y') – Saseow 2013-03-08 02:04:28

+0

用日志替换'日志'。 – 2013-03-08 02:08:40

+0

与左连接相同的语法错误。 – Saseow 2013-03-08 02:09:17