表1
ID1 NAME
1 Pete
2 Andy
3 Mary
表2
SELECT name, letter
FROM table1
INNER JOIN table2 ON table1.ID1 = table2.ID1
GROUP BY name, letter
HAVING COUNT(*) > 2;
Access中的SQL命令:
NAME LETTER
Pete A
Pete B
Andy R
Andy S
Andy T
Mary Z
最终,我创建了一个产生这个问题的查询:
NAME FIELD
Andy R
Andy S
Andy T
我试图产生的输出只给那些个人以及相关的字母,这些字母有两个以上的条目归属于他们。如下所示:
textArray
但是当我按名称和字段分组时,每个唯一组合的计数只会为1,因此SQL在运行时不输出任何条目。
如果我单独尝试GROUP BY名称,请像我一样大喊我的查询不包含指定的表达式'字母'作为集合函数的一部分。
答案 0 :(得分:0)
一种方法是仅对第一个表中的id进行聚合并加入它:
SELECT table2.name, table1.letter
FROM (table1 INNER JOIN
table2
ON table1.ID1 = t2.ID1
) INNER JOIN
(SELECT id1, COUNT(*) as cnt
FROM table1
GROUP BY id1
) as t1cnt
ON t1.ID1 = t1cnt.ID1
WHERE t1cnt.cnt > 2
答案 1 :(得分:0)
使用CTE并先将其分组,然后加入以获取字母值,如下所示:
with CTE(name, ID1)
as(
SELECT name, table1.ID1 FROM table1 INNER JOIN table2 ON table1.ID1 = table2.ID1 GROUP BY name HAVING COUNT( * ) > 2
)
SELECT name, letter
FROM cte
INNER JOIN table2 ON cte.ID1 = table2.ID1
答案 2 :(得分:0)
这样的事情应该有效:
select name, letter
from table1
inner join table2 on table1.id = table2.id
inner join
(select id
from table1
group by id
having count(*) > 2) as t1 on t1.id = table1.id;