【发布时间】:2018-10-08 08:12:59
【问题描述】:
更新:这是问题的演示:http://www.sqlfiddle.com/#!9/15ff5e/1
我正在尝试对以下 2 个表执行左连接:
post_metrics
| post_id | likes |
|---------|-------|
| 'aaa' | 3 |
| 'aaa' | 7 |
| 'aaa' | 8 |
| 'bbb' | 2 |
| 'bbb' | 4 |
post_history
| post_id | post_text |
|---------|-----------|
| 'aaa' | 'doug' |
| 'bbb' | 'steve' |
结果类似如下:
| post_id | likes | post_text |
|---------|-------|-----------|
| 'aaa' | 3 | 'doug' |
| 'aaa' | 7 | NULL |
| 'aaa' | 8 | NULL |
| 'bbb' | 2 | 'steve' |
| 'bbb' | 4 | NULL |
我想用前几行的数据填充这些 NULL 值,结果是这样的:
| post_id | likes | post_text |
|---------|-------|-----------|
| 'aaa' | 3 | 'doug' |
| 'aaa' | 7 | 'doug' |
| 'aaa' | 8 | 'doug' |
| 'bbb' | 2 | 'steve' |
| 'bbb' | 4 | 'steve' |
但是,我正在使用的查询...
SELECT m.id,
m.likes,
@username := ifnull(p.username, @username) as username
FROM (select * from `post_metrics` WHERE post_id = @post_id) AS m
LEFT JOIN `post_history` AS p ON (m.post_id = p.post_id)
...给我以下结果:
| post_id | likes | post_text |
|---------|-------|-----------|
| 'aaa' | 3 | 'doug' |
| 'aaa' | 7 | 'steve' |
| 'aaa' | 8 | 'steve' |
| 'bbb' | 2 | 'steve' |
| 'bbb' | 4 | 'steve' |
如何正确填充前几行的空值?
这些表有数百万行和大约 6 列要填充的稀疏空值。每个 post_id 的“post_text”字段并不总是相同的(偶尔会有所不同),因此我需要将这些更改传播到以下具有 NULL 的行。
【问题讨论】:
-
为什么直接
LEFT JOIN不起作用? sqlfiddle.com/#!9/624cb/5 -
@Nick 这是一个展示问题的更新示例:sqlfiddle.com/#!9/15ff5e/1 原始问题中没有包含一些附加参数,试图找到显示问题的最小示例,我想我现在有了,很抱歉造成混乱
标签: mysql database join left-join