需要插入到表public_holidays,按給定日期匹配假期表日期,它應匹配CLOCK表clock_in和clock_out時間字段並獲取28800 = 8小時的時間差(秒)並且還需要從用戶表user_id中匹配指定表,對於非常亂的代碼抱歉,非常困惑,任何幫助都可能非常有用,謝謝。Mysql插入查詢與多個地方和加入操作
鐘錶
id user_id date clock_in clock_out created_at updated_at
6 12 2016-06-10 2016-06-10 06:00:00 2016-06-10 14:00:00 2016-06-10 19:20:41 2016-06-10 00:15:51
用戶
假期
id date holiday_description created_at updated_at
1 2016-06-10 christmas 2016-06-11 15:23:54 2016-06-11 15:23:54
名稱
designation_id department_id designation created_at updated_at
1 1 employee 2016-01-30 21:03:24 2016-01-30 22:03:24
部
department_id department_name department_description created_at updated_at
1 IT Info tech 2016-01-30 21:03:24 2016-01-30 21:03:24
需要由時鐘表計算時間8小時插入到這個表Public_holidays在下面的格式
user_id department_id designation_id date_cur clock_in clock_out created_at updated_at
12 1 1 2016-06-13 2016-06-10 06:00:00 2016-06-10 14:00:00 2016-06-13 21:03:24 2016-06-13 21:03:24
嘗試凌亂代碼
INSERT INTO public_holidays (user_id, department_id,designation_id,clock_in,clock_out) SELECT(cl.user_id,
di.department_id,
di.designation_id,
cl.clock_in,
cl.clock_out)
FROM clock cl, designations di
where
(
select h1.date AS ph_date from holidays h1 WHERE ph_date = 2015-01-22
AND
select (TIMESTAMPDIFF(second,cl.clock_in, cl.clock_out)=28800) AS differ1
AND
INNER JOIN users AS ui ON ui.designation_id = di.id
);
您的代碼結構和語義錯誤..你首先要從你需要的表開始,然後定義這些表之間的關係,然後定義條件..最後的選擇列 – scaisEdge
MySQL討厭子查詢,即使你加入子查詢,也總是儘可能地嘗試連接。而黃金法則是,如果您加入某一列,則需要列上的索引。 – RJJ
忘掉'INSERT',直到您獲得您的'SELECT'權限。在某些數據庫管理器(甚至是phpMyAdmin)中測試查詢以獲得正確的結果集(不重複行)。選擇statemetnt中使用的所有表都應以某種方式關聯起來,加入該關係並直接用於數據或用於在WHERE子句或關係本身中的字段上過濾結果。 (可以在'IN()'子句中使用子查詢,但它會造成混亂)。 「hollidays」表與查詢無關。語法也是錯誤的 - 兩個用戶都應該連接到選定的表格,這些語句也不相關。 RTFM。 – shudder