1

我有以下表格

tab_1: 

(rs)
rs1
rs2
rs3

tab_2: 

(rs) (cell) (tf)
rs1  A549    tf1
rs1  C555    tf2
rs3  B333    tf1

我需要在 tab_1 only 列上循环并检查:

SELECT count(distinct cell) from tab_2 where rs = 'rs1'
union all
SELECT count(distinct cell) from tab_2 where rs = 'rs2'
union all
SELECT count(distinct cell) from tab_2 where rs = 'rs3';

并得到结果

2
0
1

无法理解光标应该如何工作或只是一个简单的循环(

4

1 回答 1

2

如果你想包括零计数rs2,它在tab_1但不是tab_2,你需要一个LEFT JOIN

此外,您不需要UNION为每个值 - 一个基本的GROUP BY就可以了:

SELECT tab_1.rs, COUNT(DISTINCT tab_2.cell)
FROM tab_1
LEFT JOIN tab_2 ON tab_1.rs = tab_2.rs
GROUP BY tab_1.rs
ORDER BY tab_1.rs

使用您的示例数据,此查询的结果是:

rs1   2
rs2   0
rs3   1

这里有一个 SQLFiddle 。

于 2013-05-30T13:32:53.623 回答