我有两个表,比如X和Y,它们具有相同的结构。
X:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<nav class="navbar fixed-top navbar-expand navbar-light bg-light navbar-default" role="navigation">
<div id="navbar-collapse-1" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="dropdown orange-bg">
<a href="#">Foo</a>
</li>
</ul>
</div>
</nav>
</body>
</html>
Y:
+----------+----+-------+
| date | id | value |
+----------+----+-------+
| 1.1.2019 | 1 | 1 |
| 1.1.2019 | 2 | 1 |
| 1.3.2019 | 3 | 1 |
+----------+----+-------+
我想从表X中删除所有ID与表Y中相同的ID,但日期较旧的行,因此所需的输出应如下所示:
+----------+----+-------+
| date | id | value |
+----------+----+-------+
| 1.2.2019 | 1 | 1 |
| 1.3.2019 | 2 | 1 |
+----------+----+-------+
可悲的是,我的代码均无效:/
答案 0 :(得分:1)
您可以在join
中使用delete
:
delete x
from x join
y
on x.id = y.id and x.date < y.date;
如果您只想选择这样的行(我认为这样更安全):
select x.*
from x join
y
on x.id = y.id and x.date < y.date;
上面的方法非常明智地假设date
是作为日期/时间格式而不是字符串存储的。
如果“日期”列存储为字符串,则应修复数据。首先,将格式转换为系统上的默认格式:
update x
set x.date = str_to_date(x.date, <whatever the format is here>);
日期格式不明确-我不知道哪一天是几月。
然后将列转换为日期:
alter table t
modify column date date;
答案 1 :(得分:0)
您可以使用左联接来过滤表X并删除行。
DELETE X
FROM x X
LEFT JOIN y Y ON X.id = Y.id
WHERE Y.id IS NOT NULL
AND Y.DATE > X.DATE