3

下面是我如何通过多列(a、b 和 c)的组合来选择不同的行:

select distinct a,b,c from my_table

这很好,但我需要为这些行 (d) 检索另一列,我无法将其添加到选择部分,因为它还在确定我不想要的行唯一性方面发挥作用。

如何在不影响行唯一性的情况下检索附加列?

4

2 回答 2

2

您可以使用 group by 来执行此操作。在 MySQL 中,您可以执行以下操作:

select a, b, c, d
from my_table
group by a, b, c

这将为“d”选择一个任意值,这通常(但不是保证!)是遇到的第一个值。这使用了 MySQL 的一个特性,称为隐藏列。

对于在 MySQL 和其他数据库中工作的代码,您需要更加明确:

select a, b, c, min(d)
from my_table
group by a, b, c

在 MySQL 中获取 d 的实际随机值有点棘手,需要更多的工作。这是一种方法:

select distinct a, b, c,
       (select d from my_table mt2
        where mt.a = mt2.a and mt.b = mt2.b and mt.c = mt2.c
        order by rand()
        limit 1
       ) d
from my_table mt
于 2012-10-01T19:42:21.933 回答
0

看起来像一个加入的工作......可能是一个LEFT JOIN。像这样的东西:

SELECT DISTINCT L.a, L.b, L.c FROM `my_table` L
LEFT JOIN (
    SELECT a, b, c, d FROM `my_table`
) R ON L.a=R.a AND L.b=R.b AND L.c=R.c
于 2012-10-01T19:47:02.040 回答