1

以下は、この質問の目的のために、私の問題を単純化したものです。私は2つのテーブルを持っています。

テーブルプロファイル:

TABLE profile
profile_id  | first_name    | last_name
1           | David         | Battery
2           | John          | Motor

テーブルknown_names:

TABLE known_names
profile_id  | first_name
1           | A
1           | B
1           | C
2           | X
2           | Y
2           | X

私が達成しようとしているのは、profile.profile_id = known_names.profile_idの場合、profile.last_nameと一緒にknown_names.first_nameを出力することです。しかし、結果の行の1つにprofile.first_nameとprofile.last_nameも出力したいと思います。

したがって、クエリは次のようになります(構文が間違っているため、これを行うための正しいクエリを探しています)。

SELECT profile_id, first_name, last_name FROM profile CROSS JOIN known_names ON known_names.profile_id = profile.profile_id WHERE profile.first_name = 'David'

結果の例は次のとおりです。

profile_id  | first_name    | last_name
1           | David         | Battery
1           | A             | Battery
1           | B             | Battery
1           | C             | Battery

それを実現できるクエリを作成するにはどうすればよいですか?

4

4 に答える 4

2

これを試して::

   Select t.profileId, t.firstName, t.lastName
    FROM
(
SELECT 
        p.profile_id as profileId, 
        p.first_name as firstName, 
        p.first_name as first_Name,
        p.last_name as lastName
        FROM profile p

    UNION 

        SELECT 
        p.profile_id as profileId, 
        k.first_name as firstName,
        p.first_name as first_Name,
        p.last_name as lastName 
        FROM profile p, 
        known_names k
        WHERE  k.profile_id = p.profile_id
) t
where t.first_Name='David'

SQLフィドルを確認してください

于 2013-02-10T07:15:24.253 に答える
1

GROUP BY WITH ROLLUPはあまり使用しないことを認めなければなりませんが、 UNION クエリを使用せずに質問に答えるために使用したかったのです。

SELECT
  profile_id,
  COALESCE(first_name_k, first_name_p) First_Name,
  Last_Name
FROM (
  SELECT 
    p.profile_id, 
    k.first_name as first_name_k,
    p.first_name as first_name_p,
    p.last_name 
  FROM
    profile p inner join known_names k
    ON k.profile_id = p.profile_id
  WHERE
    p.first_name='David'
  GROUP BY
    p.profile_id,
    k.first_name WITH ROLLUP
  ) s
WHERE
  profile_id IS NOT NULL
ORDER BY
  first_name_k IS NOT NULL,
  COALESCE(first_name_k, first_name_p)

ここで動作することを確認してください。

于 2013-02-10T09:56:37.617 に答える
1

first_name ではなく profile_id をクエリへの入力として使用できると仮定します。

SELECT
  p.profile_id AS profileId,
  p.first_name AS firstName,
  p.last_name AS lastName
  FROM profile p
  WHERE p.profile_id = 1

UNION

SELECT
  k.profile_id AS profileId,
  k.first_name AS firstName,
  p.last_name AS lastName
  FROM known_names k
  INNER JOIN profile p ON p.profile_id = k.profile_id
  WHERE k.profile_id = 1

http://www.sqlfiddle.com/#!2/fa421/18

于 2013-02-10T08:58:17.197 に答える
0

SELECT  a.*,
        b.first_name other_FirstName
FROM    profile a
        INNER JOIN known_names b
            ON a.profile_ID = b.profile_ID
// WHERE a.first_Name = ''
ORDER BY a.profile_id, a.first_Name

SELECT  a.*
FROM    profile a
WHERE   first_name = 'david'
UNION
SELECT  c.profile_id, c.first_name, d.last_name
FROM    profile b
        INNER JOIN known_names c
            ON b.profile_ID = c.profile_ID
        CROSS JOIN 
       (
          SELECT  last_Name
          FROM    profile 
          WHERE   first_name = 'david'
       ) d
WHERE   b.first_name = 'david'

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

于 2013-02-10T07:14:04.493 に答える