返回数据而不在比较中包含该数据

时间:2012-10-04 15:41:50

标签: sql

我使用以下代码:

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'导致它比我想要的更难。我是否需要编写一个异常块来填充这种请求?

谢谢!

1 个答案:

答案 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