如何在MySQL中加入这些数据?
如果我有这样一张桌子:如何在MySQL中加入这些数据?,mysql,sql,Mysql,Sql,如果我有这样一张桌子: 表格A: id| object | type 1 | greg | person 2 | mary | person 3 | jared | person 4 | kelly | person 5 | melissa | person 6 | william | person 7 | skiing | hobby 8 | biking | hobby id | husband | wife 1 | greg | mary 2 | jared | kelly 3 | wi
表格A
:
id| object | type
1 | greg | person
2 | mary | person
3 | jared | person
4 | kelly | person
5 | melissa | person
6 | william | person
7 | skiing | hobby
8 | biking | hobby
id | husband | wife
1 | greg | mary
2 | jared | kelly
3 | william | kelly
id | female | hobby
1 | mary | skiing
2 | kelly | biking
id | a | b | link
1 | 1 | 2 | related
2 | 3 | 4 | related
3 | 6 | 4 | related
4 | 1 | 4 | related
5 | 2 | 7 | likes
6 | 4 | 8 | likes
表B
:
id| object | type
1 | greg | person
2 | mary | person
3 | jared | person
4 | kelly | person
5 | melissa | person
6 | william | person
7 | skiing | hobby
8 | biking | hobby
id | husband | wife
1 | greg | mary
2 | jared | kelly
3 | william | kelly
id | female | hobby
1 | mary | skiing
2 | kelly | biking
id | a | b | link
1 | 1 | 2 | related
2 | 3 | 4 | related
3 | 6 | 4 | related
4 | 1 | 4 | related
5 | 2 | 7 | likes
6 | 4 | 8 | likes
表C
:
id| object | type
1 | greg | person
2 | mary | person
3 | jared | person
4 | kelly | person
5 | melissa | person
6 | william | person
7 | skiing | hobby
8 | biking | hobby
id | husband | wife
1 | greg | mary
2 | jared | kelly
3 | william | kelly
id | female | hobby
1 | mary | skiing
2 | kelly | biking
id | a | b | link
1 | 1 | 2 | related
2 | 3 | 4 | related
3 | 6 | 4 | related
4 | 1 | 4 | related
5 | 2 | 7 | likes
6 | 4 | 8 | likes
是否有办法获得以下结果表:
表格
:
id| object | type
1 | greg | person
2 | mary | person
3 | jared | person
4 | kelly | person
5 | melissa | person
6 | william | person
7 | skiing | hobby
8 | biking | hobby
id | husband | wife
1 | greg | mary
2 | jared | kelly
3 | william | kelly
id | female | hobby
1 | mary | skiing
2 | kelly | biking
id | a | b | link
1 | 1 | 2 | related
2 | 3 | 4 | related
3 | 6 | 4 | related
4 | 1 | 4 | related
5 | 2 | 7 | likes
6 | 4 | 8 | likes
仅使用MySQL查询(/ies)
- 逻辑基本上从表B和表B的所有行开始迭代
- 当所选表格为
时,第三列为TableB
,当所处理表格为TableB时,第三列为related
likes
表格B
(丈夫)格雷格和妻子(玛丽)的第一行,它从表格a中查看格雷格位于第1行(id 1),玛丽位于第2行(id 2),并创建一个新表格,第一行为1 | 2
是否有一个查询可以执行一些连接,或者可以执行一些操作,而不必通过编程方式遍历TABLEB的所有行,然后遍历TABLEC的所有行以生成所需的表?您需要使用
TABLEB将表连接到tablea
两次:
- 一个用于丈夫
对象
,另一个用于
一个用于妻子
对象
这样您就可以在同一行中获得丈夫和妻子的两个ID
与table C
与table A
相同。然后使用UNION
(隐式distinct)或UNION ALL
合并两个结果集
比如:
SELECT
(@rownum := @rownum + 1) AS id,
sub.*
FROM
(
SELECT
ah.id AS a,
aw.id AS b,
'related' AS link
FROM tableb AS b
INNER JOIN Tablea AS ah ON ah.object = b.husband AND ah.type = 'person'
INNER JOIN Tablea AS aw ON aw.object = b.wife AND aw.type = 'person'
UNION ALL
SELECT
a.id AS a,
a2.id AS b,
'hobby'
FROM tablec AS c
INNER JOIN tablea AS a ON a.object = c.female
INNER JOIN tablea AS a2 ON a2.object = c.hobby AND a2.type = 'hobby'
) AS Sub, (SELECT @rownum := 0) AS t;
这将为您提供:
| ID | A | B | LINK |
------------------------
| 1 | 1 | 2 | related |
| 2 | 3 | 4 | related |
| 3 | 6 | 4 | related |
| 4 | 2 | 7 | hobby |
| 5 | 4 | 8 | hobby |
注意:
- 此查询将只提供5行,其中您要查找的预期结果集为6。它缺少与
,因为在4 | 1 | 4 |相关的行
中没有针对那些表B
(id 1)和greg
(id 4)的条目。正如你在问题中解释的那样keyl
- 新列
是从结果集生成的自动增量id,它不是从表中选择的id
如果需要从此选择创建全新的表,请使用以下语法:
CREATE TABLE Tabled
AS
SELECT ...
... -- the same previous select query
您将有一个新的表table
,它的结构与此SELECT
相同