【发布时间】:2012-01-27 11:54:06
【问题描述】:
我有这个查询可以满足我的需要,但我觉得我可以稍微改进它,但我不确定如何。
选择 * (CASE WHEN (SELECT f1 FROM tbl1 WHERE cond1 ORDER BY o1 LIMIT 1) then 'something0' WHEN (SELECT f1 FROM tbl1 WHERE cond2 ORDER BY o2 LIMIT 1) then 'something1' WHEN (SELECT f1 FROM tbl1 WHERE cond3 ORDER BY o3 LIMIT 1) then 'something2' WHEN(从 tbl1 选择 f1 WHERE cond4 ORDER BY o4 LIMIT 1)然后 'something3' WHEN (SELECT f1 FROM tbl1 WHERE cond5 ORDER BY o5 LIMIT 1) then 'something4' END) 作为第 X 列 来自 tbl1 WHERE another_cond1 AND f1 = (SELECT f1 FROM tbl1 WHERE cond1 ORDER BY o1 LIMIT 1) OR another_cond2 AND f1 = (SELECT f1 FROM tbl1 WHERE cond2 ORDER BY o2 LIMIT 1) OR another_cond3 AND f1 = (SELECT f1 FROM tbl1 WHERE cond3 ORDER BY o3 LIMIT 1) OR another_cond4 AND f1 = (SELECT f1 FROM tbl1 WHERE cond4 ORDER BY o4 LIMIT 1) OR another_cond5 AND f1 = (SELECT f1 FROM tbl1 WHERE cond5 ORDER BY o5 LIMIT 1)我尝试使用变量,但没有取得多大成功,尤其是在阅读了 MySQL 文档之后,该文档说“作为一般规则,您永远不应该为用户变量赋值并在同一语句中读取该值”。
任何帮助将不胜感激。
编辑
我尝试使用 JOINS,但使用 LEFT JOINS 将不起作用,因为查询可能不会返回任何结果。使用 FULL OUTER JOIN 仿真只需要很长时间。 (在大约 5000 行的表上测试)
【问题讨论】: