MySql根据列标准明确地加入行

时间:2016-04-08 07:38:08

标签: mysql

我有一个表1,我想加入另一个表2,表2有不止一行有不同的活动,所以我想要做的是在加入时取消复制然后如果一列故事2有读写活动。如果行包含两者,则仅显示具有写入活动的行和仅日期,如果其他行除了read之外没有其他活动,则为日期列显示null,行应该是不同的

表1

id  |   labref
------------------
1   |  123
2   |  456
3   |  789
4   |  1011
5   |  1213
------------------

表2

id | labref | Activity | date
-------------------------------
1  |   123  |  read    | 29
2  |   123  |  Write   | 30
3  |   456  |  Write   | 31
4  |   789  |  read    | 04
5  |   1213 |  read    | 29
6  |   1011 |  read    | 04
7  |   1011 |  Write   | 05
-------------------------------

结果表

id | labref | Activity | date
-------------------------------
1  |   123  |  Write   | 30
2  |   456  |  Write   | 31
3  |   789  |  read    | NULL
4  |   1213 |  read    | NULL
5  |   1011|  Write    | 05
-------------------------------

关于我如何实现这一目标的任何建议

2 个答案:

答案 0 :(得分:1)

var re = /videos\/([^\/]+)/; 
var str = 'http://example.dev/admin#/videos/status:3&site:4&categories:15,2,3&actors:33,5,36&search:Grass hopper /';
var m = str.match(re);
var res = [];
if (m) {
  res = m[1].split("&");
  res = res.map(x => x.replace(":", "="));
  document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";
}

答案 1 :(得分:1)

也许这个?

SELECT
    t1.labref,
    IFNULL(t2bis.Activity, t2.Activity),
    t2bis.Date
FROM table1 t1
    LEFT JOIN table2 t2 ON t2.labref = t1.labref
                        AND t2.Activity = 'read'
    LEFT JOIN table2 t2bis ON t2bis.labref = t1.labref
                           AND t2bis.Activity = 'write'

<强>说明

  • LEFT JOIN只有读取值
  • 的table2副本
  • LEFT JOIN另一个只包含写入值
  • 的table2副本

对于活动:显示所有行的labref,如果没有写入,则显示读取(如果没有读取,则显示为null)

对于日期:只有存在写入活动时才会显示日期,因此您显示写入表格2副本的日期列。

IFNULL()显示第一个表达式,如果它不是NULL,否则显示第二个表达式。