我有两个虚表:MySQL的加入两个表为一个
1. 人民
id, age
1, 25
2. 名称
id, people_id, type, value
1, 1, 'first', 'John'
2, 1, 'last', 'Doe'
我如何加入两个表,所以我'd得到这个结果:
id, age, first, last
1, 25, 'John', 'Doe'
我有两个虚表:MySQL的加入两个表为一个
1. 人民
id, age
1, 25
2. 名称
id, people_id, type, value
1, 1, 'first', 'John'
2, 1, 'last', 'Doe'
我如何加入两个表,所以我'd得到这个结果:
id, age, first, last
1, 25, 'John', 'Doe'
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
否则,如果您有type
列未知值,动态声明更加优选。
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;
您正在寻找如何加入来自不同表的数据的一般信息。它被称为内连接。 参考可以发现here。
希望它可以帮助你,
方法: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
名称表中没有第一列或最后一列。 – unska
SELECT p.id, p.age, n.first, n.last
FROM People p
JOIN Names n
ON p.id = n.people_id;
名称表中没有第一列或最后一列。 – unska
'select p.id,(从名称n1中选择类型,其中p.id = n1.people_id和n1.type ='first'), (从名称n2中选择类型WHERE p.id = n2.people_id和n2.type ='最后')来自人员p;' –
大答案+1。 – rekire
我试图避免的是不得不两次将姓名表连接到人员表。是第一个例子,我应该明确使用,而不是双连接? – unska
双连接在哪里? –