Join 在SQL查询中使用group by和MIN进行SQL连接

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

所以,我有一个三表关系,其中“lampara_generica”被“lampara_nitide”取代

现在,我只想要一个更好的替代品,在“lampara_nitide”中有一个较低的值来代替“w_real”列

我正在执行下一个查询,结果集是预期的:

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,这意味着没有更小的东西可以加入。