gpt4 book ai didi

sql - 检查十个字段中的任意两个是否不同(不是 NULL 或相等)

转载 作者:行者123 更新时间:2023-12-01 12:05:37 25 4
gpt4 key购买 nike

我有一个包含(除其他外)十个字段的 SQL 查询,将它们命名为 v1,...,v10,我想对其进行测试。预期的情况是大多数为 NULL,其余值都相等。我正在搜索的有趣(错误?)情况是至少有两个不相等的非 NULL 值。

有没有比这更好的方法

v1 != v2 or v1 != v3 or ... v8 != v9 or v8 != v10 or v9 != v10

总共有 binomial(10, 2) = 45 个条件?

除了不优雅之外,它似乎很脆弱——而且刚刚调试了一个问题,其中一个长列表中的一个变量有错别字,而不仅仅是学术问题。但如果这是唯一可行的方法……尽管如果列表扩展到 20 个,那就不那么好了。

最佳答案

UNPIVOT 列到行,然后 GROUP BY 您的主键和 COUNT DISTINCT 中的值反透视列以查看是否有多个唯一值:

Oracle 11 设置:

CREATE TABLE table_name ( id, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 ) AS
SELECT 1, 'A', 'A', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM DUAL UNION ALL
SELECT 2, 'A', NULL, 'B', NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM DUAL UNION ALL
SELECT 3, 'A', NULL, 'A', 'A', NULL, 'A', 'A', 'A', 'A', 'A' FROM DUAL UNION ALL
SELECT 4, 'A', NULL, 'A', 'A', 'B', NULL, NULL, NULL, NULL, NULL FROM DUAL;

查询:

SELECT id
FROM table_name
UNPIVOT ( value FOR name IN ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 ) )
GROUP BY id
HAVING COUNT( DISTINCT value ) > 1

输出:

| ID || -: ||  2 ||  4 |

db<> fiddle here

关于sql - 检查十个字段中的任意两个是否不同(不是 NULL 或相等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57498521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com