0

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

我有一个问题1

(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 

我有一个查询2

(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
4

1 回答 1

0

你为什么要做这些工会?您知道 union 将两个结果集加在一起而不进行比较,是吗?也许您正在尝试进行自我加入?如果是这样,您将在此处找到一个示例:MYSQL Self-Join 是如何工作的?

另外,您的表格是否标准化?请参阅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

于 2013-02-09T12:29:13.237 回答