2013-02-09 68 views
0

Mysql查詢匹配並連接給定日期的兩行。嗨,我是新手,已經搜索並搜索堆棧溢出了一段時間,但我找不到答案。請與下面的問題幫助Mysql匹配並輸出兩行

我有一個表:人

Id Leader Name1 Name2 StartDate EndDate 
123 1  Person1   2013-02-11 2013-02-17 
123 0    Person2 2013-02-13 2013-02-13 
123 0    Person3 2013-02-13 2013-02-13 

我有一個QUERY1

(SELECT t1.Id, t1.Name1, t1.Name2 
FROM `dbo`.`people` t1 
WHERE t1.StartDate >= '2013-02-11' 
AND t1.Leader = 1) 

UNION 

(SELECT t2.Id, t2.Name1, t1.Name2 
FROM `dbo`.`people` t2 
WHERE t2.StartDate >= '2013-02-11' 
AND t2.Leader = 0) 

這將返回

Id Name1 Name2 
123, Person1 

我有一個QUERY2

(SELECT t1.Id, t1.Name1, t1.Name2 
FROM `dbo`.`people` t1 
WHERE t1.StartDate >= '2013-02-13' 
AND t1.Leader = 1) 

UNION 

(SELECT t2.Id, t2.Name1, t1.Name2 
FROM `dbo`.`people` t2 
WHERE t2.StartDate >= '2013-02-13' 
AND t2.Leader = 0) 

這將返回

Id Name1 Name2 
123, Person1 
123,   Person2 
123,   Person3 

我需要爲2012-02-11的結果顯示

Id Name1 Name2 
123, Person1 null 

併爲2012-02-13顯示

Id Name1 Name2 
123, Person1 Person2 
123, Person1 Person3 
+0

貴表的定義包括NOT NULL的名稱2?如果您包含此查詢的結果可能會有所幫助: 解釋人 – starshine531 2013-02-09 12:05:26

+0

字段,類型,空值,鍵,默認值,額外 計數器,int(11),NO,PRI,NULL, id,int(11), YES ,, NULL, leader,int(11),YES ,, NULL, name1,varchar(45),YES ,, NULL, name,varchar(45),YES ,, NULL, startdate,varchar(45 ),YES ,, NULL, enddate,varchar(45),YES ,, NULL, – user1254513 2013-02-09 12:15:29

回答

0

爲什麼你在做這些工會嗎?你明白,工會不加比較就把兩個結果集合在一起,是的?也許你正在嘗試自我加入?如果是這樣,你會在這裏找到一個例子:How does a MYSQL Self-Join Work?

此外,你的表是否正常化?請參閱http://en.wikipedia.org/wiki/Database_normalization 如果您將表格分開,您可能會有更好的時間。一個常見的初學者錯誤是試圖將太多的信息塞進一張表中。爲什麼你有'名字1'和'名字2'?也許你應該有一個單獨的「領導者」表,如果你存儲的信息對於領導者來說不同於非領導者,然後將他們與一個id關聯起來。爲什麼在你的表中id列總是一樣的?這是什麼ID?這些人是否屬於同一組?

下面是一些附加的信息聯接,以及可以幫助你理解:

http://dev.mysql.com/doc/refman/5.0/en/join.html

http://en.wikipedia.org/wiki/Join_%28SQL%29

+0

我理解同一個表上的連接語法。查詢結果的連接語法是什麼:(SELECT t1.Id,t1.Name1,t1.Name2 FROM'dbo'.'people' t1 WHERE t1.StartDate> ='2013-02-13 ' AND t1.Leader = 1) UNION (SELECT t2.Id,t2.Name1,t1.Name2 FROM'dbo'.'people' T2 WHERE t2.StartDate> =' 2013年2月13日' AND t2。Leader = 0) – user1254513 2013-02-09 12:34:42

+0

語法與我的答案中的自我連接相同。你希望你的選擇有t1.Name1,t2.Name2,你會加入id。同樣,你應該考慮重新設計你的桌子。如果你不這樣做,你最終會遇到很多雜亂的問題。 – starshine531 2013-02-09 12:51:21