Join 在SQL查询中使用group by和MIN进行SQL连接
所以,我有一个三表关系,其中“lampara_generica”被“lampara_nitide”取代 现在,我只想要一个更好的替代品,在“lampara_nitide”中有一个较低的值来代替“w_real”列 我正在执行下一个查询,结果集是预期的:Join 在SQL查询中使用group by和MIN进行SQL连接,join,group-by,greatest-n-per-group,Join,Group By,Greatest N Per Group,所以,我有一个三表关系,其中“lampara_generica”被“lampara_nitide”取代 现在,我只想要一个更好的替代品,在“lampara_nitide”中有一个较低的值来代替“w_real”列 我正在执行下一个查询,结果集是预期的: SELECT lampara_nitide_has_lampara_generica.* , lampara_nitide.* FROM lampara_nitide_has_lampara_generica INNER JOIN lampa
SELECT lampara_nitide_has_lampara_generica.* , lampara_nitide.*
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
+-------------------+---------------------+----+--------+-----------+-----------+---------------------+---------------------+
| lampara_nitide_id | lampara_generica_id | id | nombre | w_teorico | w_real | horas_mantenimiento | coste_mantenimiento |
+-------------------+---------------------+----+--------+-----------+-----------+---------------------+---------------------+
| 1 | 1 | 1 | 4 | 4.0000000 | 0.5000000 | 4 | 4 |
| 2 | 1 | 2 | 5 | 5.0000000 | 0.2500000 | 5 | 5 |
| 2 | 2 | 2 | 5 | 5.0000000 | 0.2500000 | 5 | 5 |
| 3 | 1 | 3 | 6 | 6.0000000 | 0.1000000 | 6 | 6 |
| 3 | 3 | 3 | 6 | 6.0000000 | 0.1000000 | 6 | 6 |
+-------------------+---------------------+----+--------+-----------+-----------+---------------------+---------------------+
但是,一旦我编辑它以获得“w_real”列的MIN
,并通过“lampara\u generica\u id”进行分组,所有的id列都会被弄乱
除此之外,我还尝试过:
SELECT lampara_nitide_has_lampara_generica.* , lampara_nitide.* , min(w_real)
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
group by lampara_generica_id
+-------------------+---------------------+----+--------+-----------+-----------+---------------------+---------------------+-------------+
| lampara_nitide_id | lampara_generica_id | id | nombre | w_teorico | w_real | horas_mantenimiento | coste_mantenimiento | min(w_real) |
+-------------------+---------------------+----+--------+-----------+-----------+---------------------+---------------------+-------------+
| 1 | 1 | 1 | 4 | 4.0000000 | 0.5000000 | 4 | 4 | 0.1000000 |
| 2 | 2 | 2 | 5 | 5.0000000 | 0.2500000 | 5 | 5 | 0.2500000 |
| 3 | 3 | 3 | 6 | 6.0000000 | 0.1000000 | 6 | 6 | 0.1000000 |
+-------------------+---------------------+----+--------+-----------+-----------+---------------------+---------------------+-------------+
有人知道该如何进行这个查询吗
有趣的链接->在有聚合(即min)的查询中,不要使用select*
您需要在groupby
子句中包含每个未聚合的列,并且它将根据这些列进行分组
这意味着您只需选择要调用MIN
函数的列,以及希望分组依据影响的任何列
换句话说,如果您选择PK字段(id),您将始终获得所有行。不要在有聚合(即min)的查询中使用select*
您需要在groupby
子句中包含每个未聚合的列,并且它将根据这些列进行分组
这意味着您只需选择要调用MIN
函数的列,以及希望分组依据影响的任何列
换句话说,如果您选择PK字段(id),您将始终获得所有行。这可以使用临时表来完成
SELECT gen.* , nit.*
FROM
lampara_nitide_has_lampara_generica gen
INNER JOIN lampara_nitide nit ON nit.id =
gen.lampara_nitide_id,
(SELECT lampara_generica_id, min(w_real) as MIN_W_Real,
FROM lampara_nitide_has_lampara_generica gen1
INNER JOIN lampara_nitide nit1 ON nit1.id =
gen1.lampara_nitide_id
GROUP BY gen1.lampara_generica_id ) AS temp
WHERE
gen.lampara_generica_id = temp.lampara_generica_id AND
nit.w_real = temp.MIN_W_Real
这可以使用临时表来完成
SELECT gen.* , nit.*
FROM
lampara_nitide_has_lampara_generica gen
INNER JOIN lampara_nitide nit ON nit.id =
gen.lampara_nitide_id,
(SELECT lampara_generica_id, min(w_real) as MIN_W_Real,
FROM lampara_nitide_has_lampara_generica gen1
INNER JOIN lampara_nitide nit1 ON nit1.id =
gen1.lampara_nitide_id
GROUP BY gen1.lampara_generica_id ) AS temp
WHERE
gen.lampara_generica_id = temp.lampara_generica_id AND
nit.w_real = temp.MIN_W_Real
我相信至少有两种解决方案:
1) 使用内部联接
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide.id as lampara_nitide_id,
lampara_nitide.w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide ON lampara_nitide_has_lampara_generica.lampara_nitide_id = lampara_nitide.id
INNER JOIN
(SELECT lampara_generica_id, min(w_real) as min_w_real
FROM
(
SELECT *
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_joined
GROUP BY lampara_generica_id) lampara_joined_min
ON lampara_joined_min.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
AND lampara_joined_min.min_w_real = lampara_nitide.w_real
ORDER BY lampara_nitide_has_lampara_generica.lampara_generica_id
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide.id as lampara_nitide_id,
lampara_nitide.w_real FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide ON lampara_nitide_has_lampara_generica.lampara_nitide_id = lampara_nitide.id
LEFT OUTER JOIN
(SELECT lampara_nitide_has_lampara_generica.lampara_generica_id, w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_joined
ON lampara_joined.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
AND lampara_nitide.w_real > lampara_joined.w_real
WHERE lampara_joined.lampara_generica_id is null
ORDER BY lampara_nitide_has_lampara_generica.lampara_generica_id
2) 使用左外联接
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide.id as lampara_nitide_id,
lampara_nitide.w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide ON lampara_nitide_has_lampara_generica.lampara_nitide_id = lampara_nitide.id
INNER JOIN
(SELECT lampara_generica_id, min(w_real) as min_w_real
FROM
(
SELECT *
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_joined
GROUP BY lampara_generica_id) lampara_joined_min
ON lampara_joined_min.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
AND lampara_joined_min.min_w_real = lampara_nitide.w_real
ORDER BY lampara_nitide_has_lampara_generica.lampara_generica_id
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide.id as lampara_nitide_id,
lampara_nitide.w_real FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide ON lampara_nitide_has_lampara_generica.lampara_nitide_id = lampara_nitide.id
LEFT OUTER JOIN
(SELECT lampara_nitide_has_lampara_generica.lampara_generica_id, w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_joined
ON lampara_joined.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
AND lampara_nitide.w_real > lampara_joined.w_real
WHERE lampara_joined.lampara_generica_id is null
ORDER BY lampara_nitide_has_lampara_generica.lampara_generica_id
此处可以找到这项工作的原因说明:
我找到了另一个解决方案:
SELECT lampara_generica_id, id, w_real
FROM
(
SELECT lampara_nitide_has_lampara_generica.* , lampara_nitide.* ,
(Select min(w_real)
from lampara_nitide t
where t.id in
(
select lampara_nitide_id from lampara_nitide_has_lampara_generica gen
where gen.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
)
) as MIN
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_with_min
WHERE lampara_with_min.MIN = lampara_with_min.w_real
ORDER BY lampara_generica_id
SELECT lampara_generica_id, lampara_nitide_id, w_real
FROM
(
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide_has_lampara_generica.lampara_nitide_id,
w_real,
MIN(w_real) OVER (partition by lampara_nitide_has_lampara_generica.lampara_generica_id) as min
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) t
WHERE t.w_real = t.min
另外两种解决方案,但仅适用于SQL SERVER:
SELECT lampara_generica_id, id, w_real
FROM
(
SELECT lampara_nitide_has_lampara_generica.* , lampara_nitide.* ,
(Select min(w_real)
from lampara_nitide t
where t.id in
(
select lampara_nitide_id from lampara_nitide_has_lampara_generica gen
where gen.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
)
) as MIN
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_with_min
WHERE lampara_with_min.MIN = lampara_with_min.w_real
ORDER BY lampara_generica_id
SELECT lampara_generica_id, lampara_nitide_id, w_real
FROM
(
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide_has_lampara_generica.lampara_nitide_id,
w_real,
MIN(w_real) OVER (partition by lampara_nitide_has_lampara_generica.lampara_generica_id) as min
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) t
WHERE t.w_real = t.min
我相信至少有两种解决方案: 1) 使用
内部联接
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide.id as lampara_nitide_id,
lampara_nitide.w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide ON lampara_nitide_has_lampara_generica.lampara_nitide_id = lampara_nitide.id
INNER JOIN
(SELECT lampara_generica_id, min(w_real) as min_w_real
FROM
(
SELECT *
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_joined
GROUP BY lampara_generica_id) lampara_joined_min
ON lampara_joined_min.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
AND lampara_joined_min.min_w_real = lampara_nitide.w_real
ORDER BY lampara_nitide_has_lampara_generica.lampara_generica_id
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide.id as lampara_nitide_id,
lampara_nitide.w_real FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide ON lampara_nitide_has_lampara_generica.lampara_nitide_id = lampara_nitide.id
LEFT OUTER JOIN
(SELECT lampara_nitide_has_lampara_generica.lampara_generica_id, w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_joined
ON lampara_joined.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
AND lampara_nitide.w_real > lampara_joined.w_real
WHERE lampara_joined.lampara_generica_id is null
ORDER BY lampara_nitide_has_lampara_generica.lampara_generica_id
2) 使用左外联接
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide.id as lampara_nitide_id,
lampara_nitide.w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide ON lampara_nitide_has_lampara_generica.lampara_nitide_id = lampara_nitide.id
INNER JOIN
(SELECT lampara_generica_id, min(w_real) as min_w_real
FROM
(
SELECT *
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_joined
GROUP BY lampara_generica_id) lampara_joined_min
ON lampara_joined_min.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
AND lampara_joined_min.min_w_real = lampara_nitide.w_real
ORDER BY lampara_nitide_has_lampara_generica.lampara_generica_id
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide.id as lampara_nitide_id,
lampara_nitide.w_real FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide ON lampara_nitide_has_lampara_generica.lampara_nitide_id = lampara_nitide.id
LEFT OUTER JOIN
(SELECT lampara_nitide_has_lampara_generica.lampara_generica_id, w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_joined
ON lampara_joined.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
AND lampara_nitide.w_real > lampara_joined.w_real
WHERE lampara_joined.lampara_generica_id is null
ORDER BY lampara_nitide_has_lampara_generica.lampara_generica_id
此处可以找到这项工作的原因说明:
我找到了另一个解决方案:
SELECT lampara_generica_id, id, w_real
FROM
(
SELECT lampara_nitide_has_lampara_generica.* , lampara_nitide.* ,
(Select min(w_real)
from lampara_nitide t
where t.id in
(
select lampara_nitide_id from lampara_nitide_has_lampara_generica gen
where gen.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
)
) as MIN
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_with_min
WHERE lampara_with_min.MIN = lampara_with_min.w_real
ORDER BY lampara_generica_id
SELECT lampara_generica_id, lampara_nitide_id, w_real
FROM
(
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide_has_lampara_generica.lampara_nitide_id,
w_real,
MIN(w_real) OVER (partition by lampara_nitide_has_lampara_generica.lampara_generica_id) as min
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) t
WHERE t.w_real = t.min
另外两种解决方案,但仅适用于SQL SERVER:
SELECT lampara_generica_id, id, w_real
FROM
(
SELECT lampara_nitide_has_lampara_generica.* , lampara_nitide.* ,
(Select min(w_real)
from lampara_nitide t
where t.id in
(
select lampara_nitide_id from lampara_nitide_has_lampara_generica gen
where gen.lampara_generica_id = lampara_nitide_has_lampara_generica.lampara_generica_id
)
) as MIN
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) lampara_with_min
WHERE lampara_with_min.MIN = lampara_with_min.w_real
ORDER BY lampara_generica_id
SELECT lampara_generica_id, lampara_nitide_id, w_real
FROM
(
SELECT lampara_nitide_has_lampara_generica.lampara_generica_id,
lampara_nitide_has_lampara_generica.lampara_nitide_id,
w_real,
MIN(w_real) OVER (partition by lampara_nitide_has_lampara_generica.lampara_generica_id) as min
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
) t
WHERE t.w_real = t.min
最后,我们用两种不同的方法解决了这个问题: 第一个
select lampara_generica_id , lampara_nitide_id , w_real from
(
SELECT lampara_generica_id , lampara_nitide.id lampara_nitide_id , w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
order by w_real asc
) t
group by lampara_generica_id
having w_real = MIN(w_real)
order by lampara_generica_id asc, lampara_nitide_id asc;
SELECT lg.*, ln.* FROM lampara_nitide_has_lampara_generica lg
INNER JOIN lampara_nitide on lampara_nitide.id = lg.lampara_nitide_id
INNER JOIN (
SELECT lampara_generica_id, MIN(w_real) as min_w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
group by lampara_generica_id
) ln on lg.lampara_generica_id = ln.lampara_generica_id and lampara_nitide.w_real = min_w_real
子查询返回按w_real asc排序的所有结果,因此当应用group by时,它找到的第一个结果就是我需要的结果。然后我使用一个必须丢弃那些w_real不是的=该组的分钟数
第二个
select lampara_generica_id , lampara_nitide_id , w_real from
(
SELECT lampara_generica_id , lampara_nitide.id lampara_nitide_id , w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
order by w_real asc
) t
group by lampara_generica_id
having w_real = MIN(w_real)
order by lampara_generica_id asc, lampara_nitide_id asc;
SELECT lg.*, ln.* FROM lampara_nitide_has_lampara_generica lg
INNER JOIN lampara_nitide on lampara_nitide.id = lg.lampara_nitide_id
INNER JOIN (
SELECT lampara_generica_id, MIN(w_real) as min_w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
group by lampara_generica_id
) ln on lg.lampara_generica_id = ln.lampara_generica_id and lampara_nitide.w_real = min_w_real
在子查询中,我们返回按lampara_generica_id分组的“lampara_generica_id,MIN(w_real)”,因此每个泛型都有一个结果。然后在otutter查询中,我们使用内部连接按“lampara_generica_id,MIN(w_real)”进行过滤
这辆车有一个问题。如果两个镍钛合金具有相同的w_real它将返回两个结果。最后,我们用两种不同的方法解决了这个问题: 第一个
select lampara_generica_id , lampara_nitide_id , w_real from
(
SELECT lampara_generica_id , lampara_nitide.id lampara_nitide_id , w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
order by w_real asc
) t
group by lampara_generica_id
having w_real = MIN(w_real)
order by lampara_generica_id asc, lampara_nitide_id asc;
SELECT lg.*, ln.* FROM lampara_nitide_has_lampara_generica lg
INNER JOIN lampara_nitide on lampara_nitide.id = lg.lampara_nitide_id
INNER JOIN (
SELECT lampara_generica_id, MIN(w_real) as min_w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
group by lampara_generica_id
) ln on lg.lampara_generica_id = ln.lampara_generica_id and lampara_nitide.w_real = min_w_real
子查询返回按w_real asc排序的所有结果,因此当应用group by时,它找到的第一个结果就是我需要的结果。然后我使用一个必须丢弃那些w_real不是的=该组的分钟数
第二个
select lampara_generica_id , lampara_nitide_id , w_real from
(
SELECT lampara_generica_id , lampara_nitide.id lampara_nitide_id , w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
order by w_real asc
) t
group by lampara_generica_id
having w_real = MIN(w_real)
order by lampara_generica_id asc, lampara_nitide_id asc;
SELECT lg.*, ln.* FROM lampara_nitide_has_lampara_generica lg
INNER JOIN lampara_nitide on lampara_nitide.id = lg.lampara_nitide_id
INNER JOIN (
SELECT lampara_generica_id, MIN(w_real) as min_w_real
FROM lampara_nitide_has_lampara_generica
INNER JOIN lampara_nitide on lampara_nitide.id = lampara_nitide_has_lampara_generica.lampara_nitide_id
group by lampara_generica_id
) ln on lg.lampara_generica_id = ln.lampara_generica_id and lampara_nitide.w_real = min_w_real
在子查询中,我们返回按lampara_generica_id分组的“lampara_generica_id,MIN(w_real)”,因此每个泛型都有一个结果。然后在otutter查询中,我们使用内部连接按“lampara_generica_id,MIN(w_real)”进行过滤
这辆车有一个问题。如果两个镍钛合金具有相同的w_real,它将返回2个结果这个问题每天都会被问到。有时它的回答也是正确的。看看你是否能找到一些类似的问题。。。。我可以看到一些类似的人就在那里------------------->>>>>你到底希望得到什么?我想得到给定lampara_nitide_id的lampara_nitide_id,它在lampara_nitide表中的w_real值最低。这个问题每天都会被问到。有时它的回答也是正确的。看看你是否能找到一些类似的问题。。。。我可以看到一些类似的人就在那里------------------->>>>>>你到底希望得到什么?我想得到给定lampara_nitide_id的lampara_nitide_id,它在lampara_nitide表中的w_real值最低。我们已经有了一种可行的方法,但你的第二种方法也有效。你能带我们看一下吗?是的,它背后有一个好主意。这是解释。最有趣的部分是比较w_real columns。尝试删除WHERE语句,您将看到所有结果。具有最低w_实数的结果与空值连接。(由于左外连接)。原因是,将w_实列作为连接条件进行比较。只有当右侧的w_real较小时,联接的右侧部分才不会为null。因此,如果右边有null,这意味着没有更小的东西可以加入。是的,我们已经有了一个有效的方法,但是你的第二个方法也有效。你能带我们看一下吗?是的,它背后有一个好主意。这是解释。最有趣的部分是比较w_real columns。尝试删除WHERE语句,您将看到所有结果。具有最低w_实数的结果与空值连接。(由于左外连接)。原因是,将w_实列作为连接条件进行比较。只有当右侧的w_real较小时,联接的右侧部分才不会为null。因此,如果右边有null,这意味着没有更小的东西可以加入。