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に対するクエリは必要ありませんが、「返されるフィールド」の1つとしてそれを望んでいます...しかし、それを行うことができないようです。

どんな援助でも大歓迎です。上記のクエリのさまざまなバリエーションを試しました。カウントの有無にかかわらず、user_id の有無にかかわらず、探しているものを取得できませんでした。

私が出力として持ちたいのは次のようなものです:

L_NAME                 F_NAME                  USER_ID               COUNT(*)
SMITH                  JOHN                    ABC123                2
SMITH                  JOHN                    BCD234                2

...しかし、今探しているので、ABC123 のユーザー ID を持つスミス、ジョンの「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 に答える