2013-01-16 37 views
1

我有表像,需要,从而获得所需的结果,而不UNION

id | OpenDate    | CloseDate 
------------------------------------------------ 
1 | 2013-01-16 07:30:48 | 2013-01-16 10:49:48 
2 | 2013-01-16 08:30:00 | NULL 

我需要去综合作用的结果如下

id | date     | type 
--------------------------------- 
1 | 2013-01-16 07:30:48 | Open 
1 | 2013-01-16 10:49:48 | Close 
2 | 2013-01-16 08:30:00 | Open 

使用UNION我们可以做到这一点,但如何获得所需的结果没有使用UNION?

回答

0

尝试使用case语句 http://dev.mysql.com/doc/refman/5.0/en/case.html

这可能是这样的(未测试)

select date, 
    case time(formatted_timefield) 
     when between '07:00:00' and '18:00:00' 
     then 'open' 
     else 'close' 
    end case 

所以,你可以使用多个检查像

select 
CASE WHEN 1=1 AND 2=2 THEN 'open' ELSE 'closed' END 
from Table 

因此,在所有尝试像

select 
    date, 
    CASE WHEN OpenDate < now() AND CloseDate > now() THEN 'open' ELSE 'closed' END 
from 
    table 
+1

小心提供一个这样解决问题的例子吗? – symcbean

+0

请再次阅读我的问题 –

+0

这将返回输出中的每一行只有一行(和列名不匹配) – symcbean

0

使用IF条件...

SELECT 
     id, 
     OpenDate as Open_Date, 
     IF (CloseDate, 'close', 'open') as Close_Date, 
     IF (CloseDate, CloseDate, '') as type 
FROM table; 
+1

错误,它不会选择关闭 –

+0

与迈克尔的答案一样,这只会返回每行输入的单行输出。 – symcbean

+0

我编辑过,但仍然不一样,他需要。 – Sahal

1

至于我可以告诉这是不可能的,你建议不使用工会获得MySQL的结果集。

这个问题更像是一个难题(家庭作业),而不是一个真正的编程问题 - 为什么UNION不可用?为什么要直接从通用工具(如PHPMyAdmin或mysql命令行客户端)访问数据?一旦你在顶层实现了一些代码(例如表示和访问控制),不用使用UNION就可以做到这一点 - 但是对于UNION语句来说可能更简单:你为什么要问?

UPDATE 我有一个解决方案,不使用UNION的问题 - 但这使得它很明显,这是一个家庭作业/面试问题。

UPDATE2 由于学习者发布了(然后删除)暗示他不开心的UNION查询的性能另一个问题,这loks不太可能是一门功课/面试问题。但仅仅为了娱乐价值,我会延迟发布我的解决方案,直到后来看看是否有其他人可以解决这个难题(提示:我的解决方案不应该改进查询的性能 - 这只是一个学习练习,试图获得没有使用UNION的期望的结果)。

UPDATE3

没人懂吗?

SELECT t.id 
,  IF(rowmultiplier.id=1, t.opendate, t.closedate) AS `date` 
,  IF(rowmultiplier.id=1, 'Open', 'Close') AS `type` 
FROM yourtable t 
, (SELECT id 
    FROM yourtable AS tablealias 
    WHERE id IN (1,2)) AS rowmultiplier 
WHERE rowmultiplier.id=1 
OR t.closedate IS NOT NULL; 

(有一些范围,用于调谐此,在不存在任何分类/过滤,然后迫使外部查询的全表表扫描和内查询的索引的查找可以使它比快得多联合查询)。

+0

请参阅此链接http://stackoverflow.com/questions/14354828/how-to-get-combined-result-in-mysql-with-query-optimization –

+0

这将会被关闭,因为不是一个真正的问题。 – symcbean

+0

我不是要求功课,在使用UNION时面临问题。由于表的行数超过4000行,所以减慢了站点加载速度。我在提供的链接中添加了EXPLAIN结果。请帮我解决这个问题。 –

0

看来你给了我们难题。 为什么在UNION关键字可用时想使查询变得复杂。 如果你给我们一个难题,我的答案是使用'联合所有'。

相关问题