我有一个表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
-------------------------------
关于我如何实现这一目标的任何建议
答案 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
只有读取值LEFT JOIN
另一个只包含写入值对于活动:显示所有行的labref,如果没有写入,则显示读取(如果没有读取,则显示为null)
对于日期:只有存在写入活动时才会显示日期,因此您显示写入表格2副本的日期列。
IFNULL()
显示第一个表达式,如果它不是NULL
,否则显示第二个表达式。