我有这个疑问:帮我重写此查询
SELECT diamond_id, carat, clarity, color, cut,
CASE clarity
WHEN "FL" THEN 0
WHEN "IF" THEN 1
WHEN "VVS1" THEN 2
WHEN "VVS2" THEN 3
WHEN "VS1" THEN 4
WHEN "VS2" THEN 5
WHEN "SI1" THEN 6
WHEN "SI2" THEN 7
WHEN "I1" THEN 8
WHEN "I2" THEN 9
WHEN "I3" THEN 10
ELSE -1
END AS clarity_score,
CASE cut
WHEN "ideal" THEN 0
WHEN "excellent" THEN 1
WHEN "very good" THEN 2
WHEN "good" THEN 3
WHEN "fair" THEN 4
WHEN "poor" THEN 5
ELSE -1
END AS cut_score
FROM rapnet_diamonds
WHERE
shape IN ("round","princess","oval")
AND (carat BETWEEN ".1" AND "5")
AND (color BETWEEN "D" AND "Z")
AND (clarity_score BETWEEN "0" AND "10")
AND (cut_score BETWEEN "0" AND "5")
正如你可以看到我动态生成的clarity_score
和cut_score
列,所以我可以在我的WHERE子句中使用它们。
首先,这给我一个错误,告诉我clarity_score
不存在。所以我想也许这是我需要使用HAVING的情况之一?
,所以我改变了我的where子句:
WHERE
shape IN ("round","princess","oval")
AND (carat BETWEEN ".1" AND "5")
AND (color BETWEEN "D" AND "Z")
HAVING
(clarity_score BETWEEN "0" AND "10")
AND (cut_score BETWEEN "0" AND "5")
我没有错误,但结果0 ...这应该返回超过10万。所以我在某处写了这个错误?
在开始重写这个之前,我不想选择这两个生成的字段,有没有办法可以写出来,所以我没有检索这两个字段,只是在where子句中使用它们?
+1:如果信息在其他地方不需要,可以使用临时表。我只会改变使用'COALESCE(clarity_lookup.clarity_score,-1)',等等 – 2010-08-07 01:06:24