2009-09-01 57 views
0

我有兩個表用於存儲不同類型事件的詳細信息。 這些表是幾乎相同的,與日期,持續時間等字段我試圖執行兩個表上的聯接,並通過互相'領域'日期排序他們。SQL加入2個類似的表

我知道簡單地將一個'type'字段添加到單個表中並將其全部存儲在一個地方,不幸的是,我使用的cms的性質不允許這樣做。

有沒有辦法簡單地執行此操作?以下查詢不會返回任何結果。

$sql = "SELECT * FROM Events_One a, Events_Two b WHERE a.Date > now() OR b.Date > now() ORDER BY Date ASC LIMIT ".$limit;

回答

3

你應該看看UNION聲明。它完全符合你的需求。

SELECT columns FROM t1 
UNION 
SELECT columns FROM t2 

爲您提供了一套,您可以稍後過濾或根據需要進行排序。

1

如果你有每種事件類型的表格,每個類型的相同的字段,我會說你應該重新考慮你的設計。這違反了規範化規則。這是一個糟糕的設計,因爲每次新事件出現時都會強制您添加另一個表。如果可以通過向現有表添加數據(如新類型值)來添加新事件,則會更好。

+1

他明確表示,在他的問題中,這個解決方案是不允許的。 – samuil 2009-09-01 09:49:47

+0

是的,這不是我的設計不幸;) – Dan 2009-09-01 10:01:38

0

如果你想加入兩個類似的表可以使用聯盟或聯合所有

聯盟:它像使用工會加入Command.When所有選中的列必須是同一datatype.Only不同值的被選中。

Union All:它幾乎就像union.There沒有明顯的操作,所以它將採取所有的值。

select * FROM Events_One a WHERE a.Date > now() 
union 
select * FROM Events_Two b WHERE b.Date > now()