SELECT state, business, a.report
FROM base
WHERE state IN
(SELECT a.state FROM heart a join (SELECT CAST(MAX(percent_adults) AS DOUBLE) max1 FROM heart)b on (a.percent_adults=b.max1));
在上面的子查询中,只能返回一个值,即表格中的a.state' heart'。 该值在主查询中使用,并从' base'中提取业务。桌子。我需要从#heart;' heart'报告中的子查询表以及州和企业。非常感谢!
答案 0 :(得分:1)
使用exists
代替in
:
SELECT state, business, a.report
FROM base b
WHERE EXISTS (SELECT 1
FROM heart h JOIN
(SELECT MAX(percent_adults) as max1
FROM heart h2
) sb
ON h.percent_adults = h2.max1
WHERE h.state = b.state and h.business = b.business
);
不要转换最大值,尤其是转换为浮点表示。比较浮点值是否相等通常很危险,但
的结果 。答案 1 :(得分:0)
见Is it possible for a subquery to return two values?
您需要在FROM子句中使用子查询来执行此操作。
答案 2 :(得分:0)
在定义子查询两次之外,我不确定是否有更有效的方法可以使用子查询来完成此操作。
但是,或许JOIN
在这里会更有用:
SELECT a.state, business, a.report
FROM base b
JOIN heart a ON (a.percent_adults = b.max1 AND b.state = a.state)
答案 3 :(得分:0)
您不需要子查询返回两个值。您需要的所有子查询都是提供唯一的连接值(依赖于两个计算的双精度值完全相同的几率)。
所以,只需进行加入并从中选择报告:
select b.state, b.business, a.report
from base b
join heart a
on a.state = b.state
where a.percent_adults =(
select max( percent_adults )
from heart );
您将联接限制为只有percent_adult
值最高的州,并从中获取报告。