我使用以下代码:
SELECT l_name, f_name, user_id
FROM (SELECT a.l_name, a.f_name, count(*)
FROM shema.emp_table1 a, schema2.emp_table2 b
WHERE a.emp_id = b.emp_id2
AND b.office_num = '4017'
AND a.email IS NULL
HAVING COUNT (a.l_name) > 1
group by a.l_name, a.f_name
ORDER BY a.l_name, a.f_name)
GROUP BY l_name, f_name;
...我想要做的是返回用户的姓氏,名字和用户ID,如果数据库中的用户在姓氏上“匹配”(可能重复)。我遇到问题的地方是USER_ID字段对每个用户来说都是唯一的...所以即使他们可能共享姓氏和名字,用户ID也是唯一的...这导致我的查询返回零行。如果我从搜索条件中删除用户ID字段,我会得到我正在寻找的列表:共享姓氏和名字的用户...(例如Doe,John,计数为4)。但即使我不希望查询用户ID,我也希望它作为“返回字段”之一......但我似乎无法做到这一点。
非常感谢任何帮助。我已经尝试了上述查询的许多不同变体,有/无内部和外部,有/没有user_id内外,等等,到目前为止没有运气得到我正在寻找的东西。
我希望输出的内容如下:
L_NAME F_NAME USER_ID COUNT(*)
SMITH JOHN ABC123 2
SMITH JOHN BCD234 2
...虽然,现在我正在寻找它,查询可能无效,因为'count(*)'对于Smith来说不是2,John用户ID为ABC123 ......'用户ID'导致它比我想要的更难。我是否需要编写一个异常块来填充这种请求?
谢谢!
答案 0 :(得分:0)
如果从子查询返回数据,并将其连接到外部查询,并且在子查询和外部查询中使用相同的限定符,则它应该可以工作。我没有你的桌子所以我无法测试这个,所以你可能需要调整一下。
SELECT x.l_name, x.f_name, a1.emp_id, x.cnt
FROM (
SELECT a.l_name, a.f_name, count(*) as CNT
FROM schema.emp_table1 a, schema2.emp_table2 b
WHERE a.emp_id = b.emp_id2
AND b.office_num = '4017'
AND a.email IS NULL
HAVING COUNT (a.l_name) > 1
GROUP BY a.l_name, a.f_name
ORDER BY a.l_name, a.f_name
) as x
INNER JOIN schema.emp_table1 a1 on x.l_name = a1.l_name
INNER JOIN schema2.emp_table2 b1 on x.l_name = b1.l_name and a1.emp_id = b1.emp_id2
WHERE b1.office_num = '4017'
AND a1.email IS NULL