考虑以下行
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;
关于mysql - 选择列值以字符串开头且不以字符串开头的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55996352/