我有两个具有相同结构的mysql表。现在我想让table1中的所有记录比table2中的相同记录更新。
table 1
id name namespace updated
437 test test/test1 2016-09-02 09:17:13
436 test test/test2 2016-09-04 09:17:13
435 test test/test3 2016-09-05 09:17:13
table 2
id name namespace updated
433 test test/test1 2016-09-02 09:17:13
434 test test/test2 2016-09-04 09:17:13
437 test test/test3 2016-09-04 09:17:13
结果总是超出预期
这是我的陈述
SELECT a.`id` , a.`name` , a.`namespace`, a.`created` ,
a.`updated`
FROM table1 AS a
LEFT JOIN table2 AS b ON a.`name` = b.`name`
AND a.`namespace` = b.`namespace`
WHERE a.`updated` > b.`updated`
怎么了?
谢谢你。答案 0 :(得分:1)
如果你在左边连接表中使用左连接don设置值在where子句中,否则它们用作内部连接
将ON添加到您的ON子句
并最后检查未连接行的空左连接值
SELECT a.`id` , a.`name` , a.`namespace`, a.`created` ,
a.`updated`
FROM table1 AS a
LEFT JOIN table2 AS b ON a.`name` = b.`name`
AND a.`namespace` = b.`namespace` and a.`updated` > b.`updated`
where b.id is null
和
尽量避免毫秒
SELECT a.`id` , a.`name` , a.`namespace`, a.`created` ,
a.`updated`
FROM table1 AS a
LEFT JOIN table2 AS b ON a.`name` = b.`name`
AND a.`namespace` = b.`namespace`
and DATE_FORMAT(a.`updated`,'%Y-%m-%d %H:%i') > DATE_FORMAT(b.`updated`,'%Y-%m-%d %H:%i')
where b.id is null
答案 1 :(得分:0)
好的,所以我想出了一个解决方案,它始终会返回每个namespace
的最新ID。
为此,我创建了一个{{3}},并提出了以下代码:
SELECT * FROM
(SELECT * FROM table1
UNION
SELECT * FROM table2
ORDER BY updated DESC
) A
GROUP BY A.namespace
ORDER BY updated DESC
这并没有发现一个id可能是2个名称空间的最新内容