刪除冗餘我有4個表如何優化或以下查詢
Table1 (employee)
id name
--------------------
1 a
2 b
Table2 (appointment)
id table1id table3id table4id sdate edate typeid
-----------------------------------------------------------------------------------
1 1 1 1 1/1/09 NULL 100
2 2 2 1 1/1/09 NULL 101
Table3 (title)
id name
---------------
1 worker1
2 worker2
3 Assistant
4 Manager
Table4 (Department names)
id name
-------------------
1 Logistics
2 ABC
3 XYZ
Type
id name
----------------
100 w (primary)
101 e (secondary)
102 r (other-primary)
103 t (.....)
104 y (....)
要避免的DUP我寫查詢作爲
Select id, name, title, dept
FROM table1 a
INNER JOIN table2 b ON a.id = b.table1id
INNER JOIN table3 c ON b.table3id = c.id
INNER JOIN table4 d ON d.id = b.table4id
WHERE typeid =
(
SELECT min(type_id) /* i want primary type appointments */
FROM table2
WHERE sdate < getdate() and (edate > getdate() or edate IS NULL)
AND sdate = (select max(sdate) from table2 where table1id = a.id)
AND typeid in (100, 102)
)
AND b.sdate < getdate() and (b.edate > getdate() or b.edate IS NULL)
AND b.sdate = (select max(sdate) from table2 where table1id = a.id)
/* last two i have to repeat again to remove dupes */
有沒有一種方法,我可以使用相同的條件下減少兩倍並查詢它只指定一次或任何其他更好的方式? AND typeid in(100,102)
哎呀...你有表的別名定義,但你不外JOIN使用它們語法 – 2010-01-26 23:03:54
如果你可以說出你想要回答什麼問題,那會有所幫助。 – Sam 2010-01-26 23:04:19
如果您使用真實表和列名稱而不是像'INNER JOIN table4 d ON d.id = b.table4id'那樣理解您的查詢會容易得多。你能解釋你的查詢應該做什麼嗎? – 2010-01-26 23:04:27