我在优化自引用 SQL 语句时遇到问题,我需要在查询的选择条件中使用表中的数据。
这是使用局部变量的示例。
SET @target_crit = (SELECT crit from table1 where id = 57)
SELECT *
FROM table1
WHERE
(@target_crit + crit > 100) AND
(@target_crit * critb < 500) AND
(@target_crit * critc >255)
这是没有局部变量但使用多个 SELECTS 的相同示例
SELECT *
FROM table1
WHERE
((SELECT crit from table1 where id = 57) + crit > 100) AND
((SELECT crit from table1 where id = 57)* critb < 500) AND
((SELECT crit from table1 where id = 57)* critc >255)
两者都有效,但有没有办法优化第二个查询,以便不需要所有这些 SELECT?看起来像一个 CROSS JOIN 但我没有加入特定的列。
这是 MySQL,实际查询在 WHERE 子句中有 8 个计算,而我的示例只有 4 个。数据表中有大约 100k 条记录。
谢谢!