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 :(得分:0)
你为什么要做这些工会?你明白联合将两个结果集加在一起而不进行比较,是吗?也许你想尝试自我加入?如果是这样,您可以在此处找到示例:How does a MYSQL Self-Join Work?
另外,你的桌子是否正常化了?见http://en.wikipedia.org/wiki/Database_normalization 如果将表拆分,可能会有更好的时间。一个常见的初学者错误是试图将太多信息塞入一个表中。为什么你有'名字1'和'名字2'?如果您存储的信息对于领导者而言与非领导者不同,那么您应该有一个单独的“领导者”表格,然后将其与ID相关联。为什么在你的表中id列总是一样的?那个id是什么?这些人是否以某种方式属于同一群体?
以下是有关联接的一些附加信息,可能有助于您理解: