编写 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 查询,选择除同时在三列中具有指定值的行之外的所有行的主要内容,如果未能解决你的问题,请参考以下文章