我刚刚使用MySQL的IN解决了一个有趣的问题,但我不知道这个“技巧”被称为什么。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
)
是有道理的,但因为在比较平等,仍然是行不通的 – Mikhail
哦一年你是对的:)我的坏 – yokoloko
我相信,如果你只是删除了' skilllevel'来自'IN'和'level' from SELECT - 整个查询将起作用,因为如果级别不匹配,则不会返回'name' – Mikhail