[英]How to join this data in MySQL?
如果我有這樣的表格:
TABLEA
:
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
TABLEB
:
id | husband | wife
1 | greg | mary
2 | jared | kelly
3 | william | kelly
TABLEC
:
id | female | hobby
1 | mary | skiing
2 | kelly | biking
有什么方法可以得到一個結果表:
TABLED
:
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)?
related
當被選擇的表是TableB
,並且是likes
當正被處理的表是表B. 示例邏輯將是:
查看TABLEB
(丈夫)greg和妻子(mary)的第一行,它從TABLEA查找greg是在第1行(id 1)而mary在第2行(id 2)並創建一個新的TableD第一行是1 | 2。
有沒有可以執行某些連接的查詢或者能夠執行此操作而無需以編程方式遍歷TABLEB的所有行,然后所有TABLEC行生成所需的TABLED?
您將需要JOIN
表tablea
兩次與tableb
:
husband
> object
和另一個, wife
> object
。 這樣你就可以把丈夫和妻子的兩個ids放在同一排。
與Tablec
相同的tablea
。 然后使用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 | related
4 | 1 | 4 | related
4 | 1 | 4 | related
,因為keyll
沒有greg
(id 1)和keyll
(id 4)的tableb
。 正如你在問題中解釋的那樣。
新列id
是自動增量id,從結果集生成,不從表中選擇。
如果您需要從此選擇中創建一個全新的表,請使用以下語法:
CREATE TABLE Tabled
AS
SELECT ...
... -- the same previous select query
你將有一個新的表tabled
具有這種結構相同的SELECT
。
create table tabled (
id int auto_increment,
a varchar(10),
b varchar(10),
link varchar(10));
insert into tabled (a, b, link)
select a1.id a, a2.id b, 'related' link
from tablea a1
join tableb b on a1.object = b.husband and a1.type = 'person'
join tablea a2 on a2.object = b.wife and a2.type = 'person'
union all
select a1.id a, a2.id b, 'likes' link
from tablea a1
join tablec c on a1.object = c.female and a1.type = 'person'
join tablea a2 on a2.object = c.hobby and a2.type = 'hobby';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.