我需要表中的所有列,但两列必须不同。我使用了这段代码,但它检查了所有列,但我只需要其中两个是不同的。我怎样才能满足这一点?
select distinct a.personalId, a.fileId, a.name, a.surname, a.address from my_table a
如果我使用以下代码,则无法获取其他列:
select distinct a.personalId, a.fileId from my_table a
Postgresql 支持 DISTINCT ON 语法:http ://www.postgresql.org/docs/current/interactive/sql-select.html
select distinct on (a.personalId, a.fileId) a.personalId, a.fileId, a.name, a.surname, a.address
from my_table a
看到Oracle 等效于 Postgres 的 DISTINCT ON?了解如何在 Oracle 中执行此操作。
如果其他列不同,会发生什么?数据库应该如何选择要显示的值?答案是“它不能”,因为它不能,所以没有语法可以做到这一点(这是一个逻辑错误)。
MySQL 确实有一个扩展,它会随机选择值。
select a.personalId, a.fileId, a.name, a.surname, a.address
from my_table a
group by a.personalId, a.fileId
但我不建议依赖这个。你需要重新考虑你正在使用的逻辑。