下面是我如何通过多列(a、b 和 c)的组合来选择不同的行:
select distinct a,b,c from my_table
这很好,但我需要为这些行 (d) 检索另一列,我无法将其添加到选择部分,因为它还在确定我不想要的行唯一性方面发挥作用。
如何在不影响行唯一性的情况下检索附加列?
您可以使用 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
看起来像一个加入的工作......可能是一个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