2013-02-09 82 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

相关问题