我有一个像这样的SQL查询:
SELECT t1.name, MAX(t2.value)
FROM t2
JOIN t1 ON t1.id = t2.t1_id
WHERE t2.t1_id = 1 AND t2.text_id = 16;
但是,当t2选择为空时,它返回一个包含NULL值的行(因为MAX函数在空集上调用时返回NULL)。我希望它返回一个空集。我怎样才能实现它?
答案 0 :(得分:1)
在sql server中试试......
with cte as
(
SELECT t1.name, MAX(t2.value) a
FROM t2
JOIN t1 ON t1.id = t2.t1_id
WHERE t2.t1_id = 1 AND t2.text_id = 16;
)
select * from cte where a is not null
在Mysql中试试这个
select p.* from
(
SELECT t1.name, MAX(t2.value) a
FROM t2
JOIN t1 ON t1.id = t2.t1_id
WHERE t2.t1_id = 1 AND t2.text_id = 16;
) p where p.a is not null
答案 1 :(得分:1)
有条款适合这里:
SELECT
t1.name, MAX(t2.value)
FROM
t2 JOIN t1 ON t1.id = t2.t1_id
WHERE
t2.t1_id = 1 AND t2.text_id = 16
-- GROUP BY something?
HAVING
MAX(t2.value) IS NOT NULL
答案 2 :(得分:1)
当您不想获得结果集时,只需RETURN
。
IF ((SELECT MAX(t2.Value) FROM t2) > 0)
SELECT t1.name, MAX(t2.value)
FROM t2
JOIN t1 ON t1.id = t2.t1_id
WHERE t2.t1_id = 1 AND t2.text_id = 16
ELSE
RETURN
答案 3 :(得分:0)
在comment之前完全同意Gordon Linoff。
将选择查询包装在另一个选择查询中是个好主意,但是当我们有许多聚合字段时,这样做将变得很麻烦,并考虑到您必须像这样对10个以上的查询进行更改。
您应该使用 GROUP BY 子句进行查询,这将帮助您解决所提到的问题,但不仅限于此,它还可以帮助您基于group子句获得汇总值(在字段范围内)。在您的情况下,您应该使用GROUP BY t1.name可以工作。 因此,您的汇总结果集将按名称分组。
如果您不使用GROUP BY,则认为您的name字段具有100个唯一值,但是只有1行,所有行都聚合了数据,这可能是错误的实现。
Here's有关聚合函数和分组依据的更多详细信息。