Mysql匹配并输出两行

时间:2013-02-09 12:00:12

标签: 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

1 个答案:

答案 0 :(得分: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