MySQL查询需要在不同的地方使用子查询的结果,例如:
SELECT COUNT(*),(SELECT hash FROM sets WHERE ID=1)
FROM sets
WHERE hash=(SELECT hash FROM sets WHERE ID=1)
and XD=2;
有没有办法避免子查询 (SELECT hash FROM sets WHERE ID=1)
的双重执行?子查询的结果总是返回一个有效的散列值。重要的是,主查询的结果也包括散列值。我首先尝试了这样一个
JOIN
:SELECT COUNT(*), m.hash FROM sets s INNER JOIN sets AS m
WHERE s.hash=m.hash AND id=1 AND xd=2;
如果XD = 2没有匹配任何一行,结果为:
+----------+------+
| count(*) | HASH |
+----------+------+
| 0 | NULL |
+----------+------+
与其使用(我需要的)这样的东西:
+----------+------+
| count(*) | HASH |
+----------+------+
| 0 | 8115e|
+----------+------+
任何想法?请告诉我!非常感谢您提供的任何帮助。//编辑:最终该查询只需要计算表中所有与ID = 1的条目具有相同哈希值且XD = 2的条目。如果没有行符合条件(如果XD设置为其他数字),则返回0并简单地使用哈希值。