编写 SQL 查询,选择除同时在三列中具有指定值的行之外的所有行

Posted

技术标签:

【中文标题】编写 SQL 查询,选择除同时在三列中具有指定值的行之外的所有行【英文标题】:Write SQL query that picks all rows except the ones that have specified value in three columns at the same time 【发布时间】:2021-04-22 05:50:20 【问题描述】:

我在一个表中有 3 列——GroupingKey、GroupingValue 和 GroupingType,如下所示:

CREATE TABLE Grouping
    (`GroupingKey` varchar(8), `GroupingValue` varchar(7), `GroupingType` varchar(8));

INSERT INTO Grouping
    (`GroupingKey`, `GroupingValue`, `GroupingType`)
VALUES
    ('Language', 'Italian', 'Category'),
    ('Language', 'Russian', 'Unknown'),
    ('Unknown', 'Unknown', 'Unknown'),
    ('Phone', 'Unknown', 'Unknown');

除了 GroupingKey、GroupingValue 和 GroupingType 中分别有 Unknown、Unknown、Unknown 的行之外,选择上表中所有行的 SQL 查询是什么?

我预期的 SQL 查询输出是:

GroupingKey GroupingValue GroupingType
Language Italian Category
Language Russian Unknown
Phone Unknown Unknown

我尝试编写如下查询:

SELECT DISTINCT groupingkey,
                groupingvalue,
                groupingtype
FROM   mytablename
WHERE  groupingkey NOT LIKE 'Unknown'
       AND groupingvalue NOT LIKE 'Unknown'
       AND groupingtype NOT LIKE 'Unknown' 

但最终发生的是,即使在上面指定的 3 列中的 1 列中,它也不会选择任何具有“未知”的行

【问题讨论】:

@Strawberry 感谢您的回复,您指的是查询的格式吗?因为我觉得我已经提供了相关表以及我尝试执行的查询,如您提供的链接中指定的那样。谢谢 您的查询说 AND groupingkey... AND...groupingvalue AND... groupingtype.... 所以只有当所有都像“未知”时。 Myabe 你应该把AND 改成OR 吗? 例如:db-fiddle.com/f/4vRJcLtcNguS18xyjwv5AV/0 【参考方案1】:

你可以这样写条件:

WHERE NOT (
            groupingkey = 'Unknown'
        AND groupingvalue = 'Unknown'
        AND groupingtype = 'Unknown'
          )

请注意,根据您的要求,您应该使用= 而不是LIKE

或者:

WHERE groupingkey <> 'Unknown'
   OR groupingvalue <> 'Unknown'
   OR groupingtype <> 'Unknown'

这意味着至少有 1 列不能是 'Unknown'

或者:

WHERE (groupingkey, groupingvalue, groupingtype) <> ('Unknown', 'Unknown', 'Unknown')

请参阅demo。

【讨论】:

以上是关于编写 SQL 查询,选择除同时在三列中具有指定值的行之外的所有行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用php在三列中显示列表?

ORACLE SQL 我需要在三列中输出 generation_name ,日期,总计

sql查询以选择两列中具有相同id但不同值的记录

如何编写sql查询以选择一列中具有最大值的行

SQL 选择以消除在下一列中具有 2 个其他值的重复值

SQL查询以选择具有最小值的不同行