mysql - 选择列值以字符串开头且不以字符串开头的行

标签 mysql sql

考虑以下行

name    StringValue
foo     Mac123

foo     Windows123

foo     Andorid123

bar     Windows123

bar     Andorid123

dumb    Windows123

这是从下面的查询返回的结果元组:

select name, stringValue from TABLE1 A, TABLE2 B, TABLE13 C
where A.id = B.id
and B.id = C.id
GROUP BY name, stringValue

如果名称的字符串值不包含以“Mac”开头的字符串,但还需要包含以“Windows”开头的值,如何选择名称

这应该返回

name
bar
dumb

我有什么:

select name, stringValue from TABLE1 A, TABLE2 B, TABLE13 C
where A.id = B.id
and B.id = C.id
GROUP BY name, stringValue
Having stringValue LIKE "Windows" and stringValue not LIKE "Mac"

问题:以上查询返回所有以名称“Windows”开头的列。因为如果前半个条件为真,则后半个条件也为真。

我认为问题与我没有按我想要的方式工作有关..

我如何修改查询以便它返回所有名称,其中具有此名称的任何列将具有不以 Mac 开头但也以 Windows 开头的字符串值。

最佳答案

不需要连接。应该使用特定的 HAVING 子句进行聚合:

SELECT name
FROM t
GROUP BY name
HAVING COUNT(CASE WHEN stringvalue LIKE 'WINDOWS%' THEN 1 END) > 0
AND    COUNT(CASE WHEN stringvalue LIKE 'MAC%'     THEN 1 END) = 0;

DB<>Fiddle

关于mysql - 选择列值以字符串开头且不以字符串开头的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55996352/

相关文章:

php - MySQL SQL语法错误;查看与您的 MySQL 服务器版本相对应的手册,了解要使用的正确语法

database - 选择每行的Mysql交换和

mysql - 选择同一个表中的多个列

mysql - 重复使用一个表对 3 个表进行 SQL 查询

mysql - 查询返回两列的总和

java - Mysql,使用逗号向列添加值

mysql - SQL - 如何找到带有 LIMIT 的 SQL 语句的平均值?

android - 在数据库更改 Android 时得到通知

mysql - 如何为 FIlter 国家/地区编写 sql 查询作为状态明智

sql - 不能在用于 GROUP BY 子句的 group by 列表的表达式中使用聚合或子查询