sql - 在查询中选择 2 个唯一列

标签 sql database oracle oracle11g

如何使用记录构建查询,使 2 列是唯一的? 这是我尝试的代码:

Select x.a, y.b
from table1 x, table2 y
where x.id = y.id;

1 - a
2 - b
3 - a
4 - b
5 - c
1 - c
6 - a
2 - a
should return this:
1 - a
2 - b
5 - c

但是有数据丢失,没关系,我只想要两个唯一的列。 我曾尝试使用 group by,但这并没有获得两者的唯一性。 为了更好地描述背后的意图: 上面的table1存储分类,table2存储值。一个分类可以有多个值,一个值可以属于任意数量的分类。现在我想从 table1 中选择所有(或部分)分类并对应于每个选择一个值,条件是如果它与任何其他分类一起选择,则这些值不应重复。在我的示例中,1、2、3..6 是分类,a、b、c 是值。现在我想选择分类和相应的值,我选择了分类 1、2、5 和相应的值 a、b、c,因为所有其他分类都会使值重复(比如 3 会使值重复,因为 a 已经通过分类选择了1).

最佳答案

OP 正在寻找具有任意分类(表 1)的唯一值(表 2)。因此,可以使用的方法是枚举 table2 中每组值内的所有分类和值对,然后仅选择每组中的第一个值。

WITH
    enumerated_data AS
    (
        SELECT 
            ROW_NUMBER() OVER (PARTITION BY y.b ORDER BY x.a DESC) rn
            , x.a
            , y.b
        FROM        table1 x
        INNER JOIN  table2 y ON x.id = y.id
    )
SELECT  a, b
FROM    enumerated_data
WHERE   rn = 1

关于sql - 在查询中选择 2 个唯一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42231458/

相关文章:

java - 生成主键 : By Pulling from a stock of Ids, 保存在Web应用程序的应用层

java - 如何在Java中设置Oracle编码

mysql - 如何在 SQL SELECT 语句中捕获 THIS year

sql - Oracle SQLPlus : Echo without line numbers?

sql - 当存在空值时将列从 varchar 更改为十进制

mysql - 在 CASE 的结果上使用 LIKE 搜索数据

mysql - 选择列的下一个值,其中在 SQL 中的不同列中找到最后一次出现的特定值

database - 如何使用 pgadmin 与 IBM Databases for Postgresql 部署中的数据进行交互?

c# - PLS-00306 : wrong number or types of arguments when calling oracle function

sql - Oracle 11g 中对 JSON 的支持