0

私は2つの架空のテーブルを持っています:

1.人

id, age
1, 25

2. 名前

id, people_id, type, value
1, 1, 'first', 'John'
2, 1, 'last', 'Doe'

この結果が得られるように、2 つのテーブルを結合するにはどうすればよいですか。

id, age, first, last
1, 25, 'John', 'Doe'
4

4 に答える 4

3
SELECT  a.ID,
        a.Age,
        MAX(CASE WHEN b.type = 'first' THEN b.Value END) `First`,
        MAX(CASE WHEN b.type = 'last' THEN b.Value END) `Last`
FROM    People a
        LEFT JOIN Names b
            ON a.ID = b.people_id
GROUP   BY a.ID, a.Age

それ以外の場合、 columntypeに不明な値がある場合は、動的ステートメントの方がはるかに優先されます。

SET @sql = NULL;

SELECT  GROUP_CONCAT(DISTINCT
        CONCAT('MAX(CASE WHEN b.type = ''',
               type,
               ''' THEN value ELSE NULL END) AS ',
               CONCAT('`', type, '`')
               )) INTO @sql
FROM Names;

SET @sql = CONCAT('SELECT  a.ID,
                            a.Age, ', @sql , '
                    FROM    People a
                            LEFT JOIN Names b
                                ON a.ID = b.people_id
                    GROUP   BY a.ID, a.Age');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2013-11-03T12:28:06.070 に答える
0
SELECT p.id, p.age, n.first, n.last
FROM People p
JOIN Names n 
ON p.id = n.people_id;
于 2013-11-03T12:33:56.937 に答える
0

異なるテーブルのデータを結合する方法に関する一般的な情報を探しています。内部結合といいます。リファレンスはこちらにあります。

于 2013-11-03T12:28:58.053 に答える
0

お役に立てば幸いです。

方法: 1

 select p.id, p.age, n.type as first, n.value as last from People as p, Names as n where p.id = n.people_id

方法: 2

 select p.id, p.age, n.type as first, n.value as last from People as p LEFT JOIN Names as n ON p.id = n.people_id 
于 2013-11-03T12:29:47.363 に答える