【发布时间】:2011-08-09 02:32:17
【问题描述】:
我刚刚使用 MySQL 的 IN 解决了一个有趣的问题,但我不知道这个“技巧”叫什么。
在我的设计中,我需要过滤掉不需要特定技能或满足技能名称和技能级别的行。这是解决方案:
SELECT * FROM table WHERE
skillname = "" OR
(skillname, skilllevel) IN (
SELECT name, level FROM skills WHERE user="Mikhail"
)
我不知道expr IN (value,...),因为dev.mysql.comexpr和value都可以是多列。
这叫什么,还有更多类似的快捷方式吗?
更重要的是 - 有没有办法将此查询转换为将skilllevel 匹配为“大于或等于”?
解决方案根据@yokoloko(虽然他不会承认)
SELECT * FROM t1 WHERE
skillname = "" OR
skillname IN (
SELECT name FROM skills WHERE user="Mikhail" AND level >= t1.skilllevel
)
【问题讨论】:
标签: mysql optimization