0

私は技術者のための簡単な出席システムを持っています。出席日数は、tech_logins というテーブルに保存されます。日付ごとに技術者ごとに 1 つのレコードがあります。技術者が実行するジョブは、ログと呼ばれるテーブルに保存されます。このテーブルには、技術者が完了するすべてのジョブが保持されます。また、tech_logins テーブルに関連する 2 つのフィールドもあります。これらは、technical_id および dos と呼ばれます。

ログ テーブルには、技術者にリンクされているが dos がリンクされていないジョブが含まれている場合があります。つまり、誰かが技術者のためにジョブを入力したが、技術者が不在の日付 (dos) である場合です。

tech_logins テーブルの login_date とリンクする dos 日付のみについて、各技術者のすべてのジョブを取得しようとしています。この sql は、1 人の技術者と 1 つの日付のレコードのみを返します。

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

クエリ構造は正しいようです。2 つのテーブルのデータが実際には 2 つの結合列で適切に一致しないというデータの問題が発生している可能性があります。

まず、tech_logins から、2 つの列の小さなセットを別々に選択してみてはいかがでしょうか。次に、tech_logins から返されたいくつかの行の 2 つの列を使用して、logs テーブルをクエリします。一歩一歩、あなたの答えが見つかります。SQLを正しく実行しています。

于 2013-03-08T01:46:23.563 に答える