1

我正在使用以下代码:

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

...虽然,现在我正在寻找它,查询可能无法正常工作,因为对于用户 ID 为 ABC123 的 Smith,John,“count(*)”不会是 2 ...“用户 ID”导致它比我想要的更困难。我需要写一个异常的块来满足这种请求吗?

谢谢!

4

1 回答 1

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
于 2012-10-04T16:34:19.703 回答