我刚使用MySQL的IN解决了一个有趣的问题,但我不知道这个“技巧”叫什么。
在我的设计中,我需要过滤掉不需要某种技能的行,或者技能名称和技能水平都符合要求的行。以下是解决方案:
SELECT * FROM table WHERE
skillname = "" OR
(skillname, skilllevel) IN (
SELECT name, level FROM skills WHERE user="Mikhail"
)
我不知道
expr
IN (value
,...)的含义,根据dev.mysql.com的说明,expr
和value
都可以是多个列。
这被称为什么,还有其他类似的快捷方式吗?
更重要的是 - 是否有一种方法可以将此查询转换为匹配skilllevel
为“大于或等于”?
解决方案根据@yokoloko(尽管他不会承认)
SELECT * FROM t1 WHERE
skillname = "" OR
skillname IN (
SELECT name FROM skills WHERE user="Mikhail" AND level >= t1.skilllevel
)