我有3個表設置這樣的(有點簡化):SQL連接3個表(基於2條規定 - ?)
time_tracking:ID,tr_proj_id,tr_min,tr_type
time_projects:ID,PROJECT_NAME
time_tasks :ID,TASK_NAME
基本上,我想要檢索基於tr_type要麼PROJECT_NAME或TASK_NAME它可以是有價值的 「項目」 或 「任務」
個一個例子
time_tracking
+----+------------+--------+---------+
| id | tr_proj_id | tr_min | tr_type |
+----+------------+--------+---------+
| 1 | 3 | 60 | project |
| 2 | 3 | 360 | task |
| 3 | 1 | 120 | project |
| 4 | 2 | 30 | project |
| 5 | 2 | 30 | task |
| 6 | 1 | 90 | task |
+----+------------+--------+---------+
time_projects
+----+------------------------+
| id | project_name |
+----+------------------------+
| 1 | Make someone happy |
| 2 | Start a project |
| 3 | Jump out of the window |
+----+------------------------+
time_tasks
+----+---------------------+
| id | task_name |
+----+---------------------+
| 1 | drink a beer |
| 2 | drink a second beer |
| 3 | drink more |
+----+---------------------+
所需的輸出
+----+------------------------+------------+--------+---------+
| id | name | tr_proj_id | tr_min | tr_type |
+----+------------------------+------------+--------+---------+
| 1 | Jump out of the window | 3 | 60 | project |
| 2 | drink more | 3 | 360 | task |
| 3 | Make someone happy | 1 | 120 | project |
| 4 | Start a project | 2 | 30 | project |
| 5 | drink a second beer | 2 | 30 | task |
| 6 | drink a beer | 1 | 90 | task |
+----+------------------------+------------+--------+---------+
而處於全真不好JOIN的事情,這是我想出來的,到目前爲止的唯一的事情(不工作..):
SELECT tt.tr_proj_id, tt.tr_type, tt.tr_min, pp.project_name, pp.id, ta.task_name, ta.id
FROM time_tracking as tt, time_projects as pp, time_tasks as ta
WHERE ((tt.tr_type = 'project' AND pp.id = tt.tr_proj_id) OR (tt.tr_type = 'task' AND ta.id = tt.tr_proj_id))
AND tt.tr_min > 0
ORDER BY tt.tr_proj_id DESC
如果任何人有關於如何做到這一點的想法,請隨時分享!
謝謝!
更新:貌似我忘了指定我使用的是訪問數據庫。這顯然不接受的東西,如CASE
或3210 ..顯然有IIF()
,但我不太清楚如何在這種情況下使用它。
這是爲什麼工作? '2 |喝更多| 3 | 360 |任務' –
期望的輸出是難以理解的,「發送電子郵件」在哪裏? –
@HamletHakobyan我的不好,你是對的,我編輯糾正輸出 – Phil