SQL - 如何从两列中查找唯一值?

And*_*ank 1 sql sqlite having

我正在使用 SQLite,并且只想获取每个表具有唯一值的行。我知道如何获取每列的值,但无法创建单个(sqlite 兼容)选择来从两列获取唯一值。

这是数据示例:

可乐 列_B
111 第777章
222 第333章
222 111
第444章 第333章
222 第555章
第333章 第666章
第333章 第777章

我从上面的示例中获得的期望结果是具有唯一值的行,其中仅包括:444、555、666。

可乐 列_B
第444章 第333章
222 第555章
第333章 第666章

222 不应出现在结果中,因为它在 col_A 中多次出现。777 不应出现在结果中,因为它在 col_B 中多次出现。我只需要 col_A 或 col_B 中出现一次值。每个表的唯一值,而不是列。

我能走多远:

SELECT * 
    FROM my_table
    WHERE 
        (SELECT col_A as asset from my_table GROUP BY col_A HAVING COUNT(*) = 1
         UNION
        SELECT col_B as asset from my_table GROUP BY col_B HAVING COUNT(*) = 1)
            IN (col_A, col_B)
Run Code Online (Sandbox Code Playgroud)

我尝试过 UNION 和其他一些方法,但无法达到预期的结果。

Bar*_*han 5

要通过UNION ALL考虑关键字来开始过滤,要么 是合适的选项,要么与HAVING子句一起确定不同的值,例如

WITH t1 AS  
(
 SELECT col
   FROM (SELECT col_A AS col  FROM t UNION ALL
         SELECT col_B         FROM t) AS tt
  GROUP BY col
 HAVING COUNT(*)=1 
)
SELECT t.* 
  FROM t1
  JOIN t
    ON col IN ( col_A , col_B )
Run Code Online (Sandbox Code Playgroud)

Demo