mysql是否存在选择查询

时间:2014-05-22 17:02:10

标签: mysql

Table A
ID | date
 1 | 2014-05-16
 2 | 2014-05-15
 3 | 2014-05-16
 4 | 2014-05-17
 5 | 2014-05-18

 Table B
 ID| A.ID   | B.Key | B.KeyValue
 1 | 1      | date  | 2014-07-23
 2 | 3      | date  | 2014-07-11
 3 | 4      | date  | 2013-10-07

我们说我有两张桌子,A& B.如何提出所有A,但在B中链接记录取代了' date'在A.例如:

A.1与B.1相关联,因此A中的新日期应为2014-07-23而不是2014-05-16。

另外,我希望按新日期排序。如,

1 | 2014-07-23
3 | 2014-07-11
5 | 2014-05-18
2 | 2014-05-15
4 | 2013-10-07

到目前为止,我有这个:

SELECT 
    DISTINCT A.ID, 
    IF(B.Key = 'date', IF(B.KeyValue <> '', B.KeyValue, A.date), A.date) new_date
FROM TableA A
LEFT JOIN TableB B ON A.ID = B.ID
ORDER BY new_date DESC

但有些我如何为链接行提供重复项。

2 个答案:

答案 0 :(得分:1)

如果您想要的是在从b输入日期后以最近的顺序显示数据,请尝试此操作。 SQL FIDDLE

一起玩
SELECT 
    a.ID, 
    COALESCE(b_date, a_date) AS updated_date
FROM a
LEFT JOIN b ON a.id = b.a_id
    AND b.key = 'date'
ORDER BY updated_date DESC

答案 1 :(得分:0)

我不确定stackoverflow中的规则,但在尝试回答这个问题时,我尝试以两种方式运行这些查询,这些方法得到了不同的结果,并且想知道是否有人可以解释这里的内容

我在b表中添加了一条记录,所以我的表格看起来像这样

表A

ID | date
 1 | 2014-05-16
 2 | 2014-05-15
 3 | 2014-05-16
 4 | 2014-05-17
 5 | 2014-05-18

表B

ID| A.ID   | B.Key | B.KeyValue
1 | 1      | date  | 2014-07-23
2 | 3      | date  | 2014-07-11
3 | 4      | date  | 2013-10-07
4 | 2      | rnd  | 1999-12-31

我运行了这个查询

SELECT 
    a.ID, 
    COALESCE(b_date, a_date) AS updated_date
FROM a
LEFT JOIN b ON a.id = b.a_id and b.key = 'date'
ORDER BY updated_date DESC

和这一个

SELECT 
    a.ID, 
    COALESCE(b_date, a_date) AS updated_date
FROM a
LEFT JOIN b ON a.id = b.a_id where b.key = 'date'
ORDER BY updated_date DESC

区别在于

and b.key = 'date'

另一个

where b.key = 'date'

有人会如此善意地解释这里发生了什么以及为什么这两个问题会产生不同的结果?