我正在查看sql内部查询(有点类似于C#anon方法的sql),并且想知道,我可以从查询中返回多个值吗?
例如,将表中的行数作为一个输出值返回,还作为另一个输出值返回不同的行数?
另外,如何区别工作?这是基于一个字段是否与另一个字段相同(因此归类为“不同”)?
我正在使用Sql Server 2005.如果我从一个查询中返回一个值而不是从一个查询中返回两个值,会不会有性能损失?
由于
答案 0 :(得分:2)
你可以这样做第一个问题:
SELECT
COUNT(field1),
COUNT(DISTINCT field2)
FROM table
(对于第一个字段,你可以做*如果需要计算空值。)
Distinct表示单词的定义。它消除了重复的返回行。
返回2个值而不是1取决于值是什么,是否被索引以及其他未确定的可能变量。
如果您在select语句中表示子查询,则不能只返回1个值。如果您想要多于1个值,则必须使用子查询作为连接。
答案 1 :(得分:0)
如果内部查询在SELECT
中内嵌,您可能很难选择多个值。但是,通常可以JOIN
代替子查询;这样,可以命名子查询,您可以获得多个结果
SELECT a.Foo, a.Bar, x.[Count], x.[Avg]
FROM a
INNER JOIN (SELECT COUNT(1) AS [Count], AVG(something) AS [Avg]) x
ON x.Something = a.Something
这可能有所帮助。
DISTINCT
按照说法行事。 IIRC,您可以SELECT COUNT(DISTINCT Foo)
等来查询不同的数据。
答案 2 :(得分:0)
表单中的内部查询:
SELECT * FROM tbl WHERE fld in (SELECT fld2 FROM tbl2 WHERE tbl.fld = tbl2.fld2)
无法返回多行。当您需要来自辅助查询的多行时,通常需要在另一个查询上执行内部联接。
行:
SELECT count(*), count(distinct *) from table
将返回一行包含两列的数据集。第1列是表中的总行数。第2列仅计算不同的行。
Distinct表示返回的数据集不会有任何重复的行。区别只能在选择后直接出现一次。因此查询如:
SELECT distinct a, b, c FROM table
可能会有这样的结果:
a1 b1 c1
a1 b1 c2
a1 b2 c2
a1 b3 c2
请注意,值在整个结果集中重复,但每行都是唯一的。
我不确定你的最后一个问题是什么意思。您应该从查询中返回与查询相关的所有数据。至于更快,只有基准测试可以告诉你哪种方法更快。
答案 3 :(得分:0)
你可以通过3种方式返回多个结果(在我的脑海中)
不同,过滤结果行是唯一的。