mysql - 秒级基于多列连接表
mysql - Join tables based on multiple columns in second
我有两个表 Place 和 Post 我需要生成输出
place
--------------
std_id sch_id
1 1
2 2
3 1
4 3
5 4
6 2
7 5
8 3
9 5
10 4
和
Post
------------
sch1_id sch2_id sch3_id sup_id
1 2 3 1
3 2 4 2
我需要生成以下输出
sup_id sch_id std_id
1 1 1
1 1 3
1 2 2
1 2 6
1 3 4
1 3 8
2 3 4
2 3 8
2 2 2
2 2 6
2 4 5
2 4 10
我试过了
SELECT pl.std_id,po.sup_id FROM `place` pl,`post` po WHERE pl.sch_id =
po.sch1_id group by po.sup_id
得到这个
| std_id | sup_id |
|--------|--------|
| 1 | 1 |
| 4 | 2 |
编辑
您可以尝试 'un-pivoting' table post
使用 UNION ALL
:
SELECT pl.std_id, po.sch_id, po.sup_id
FROM `place` pl
JOIN (
SELECT sch1_id AS sch_id, sup_id
FROM `post`
UNION ALL
SELECT sch2_id AS sch_id, sup_id
FROM `post`
UNION ALL
SELECT sch3_id AS sch_id, sup_id
FROM `post`
UNION ALL
SELECT sch4_id AS sch_id, sup_id
FROM `post`
) AS po ON pl.sch_id = po.sch_id
只需使用 IN()
:
SELECT pl.std_id,pl.sch_id,po.sup_id
FROM `place` pl
INNER JOIN `post` po
ON(pl.sch_id IN(po.sch1_id,po.sch2_id,po.sch3_id))
虽然非常推荐,但无需对数据进行归一化!!您应该重新考虑您的 table 结构。
您似乎想要形成匹配任何 sch* 值的联接,如果是这样,那么一种方法是在联接中使用多个条件:
select sup_id, sch_id, std_id
from post p
join place pl on pl.sch_id = p.sch1_id
or pl.sch_id = p.sch2_id
or pl.sch_id = p.sch3_id
我有两个表 Place 和 Post 我需要生成输出
place
--------------
std_id sch_id
1 1
2 2
3 1
4 3
5 4
6 2
7 5
8 3
9 5
10 4
和
Post
------------
sch1_id sch2_id sch3_id sup_id
1 2 3 1
3 2 4 2
我需要生成以下输出
sup_id sch_id std_id
1 1 1
1 1 3
1 2 2
1 2 6
1 3 4
1 3 8
2 3 4
2 3 8
2 2 2
2 2 6
2 4 5
2 4 10
我试过了
SELECT pl.std_id,po.sup_id FROM `place` pl,`post` po WHERE pl.sch_id =
po.sch1_id group by po.sup_id
得到这个
| std_id | sup_id |
|--------|--------|
| 1 | 1 |
| 4 | 2 |
编辑
您可以尝试 'un-pivoting' table post
使用 UNION ALL
:
SELECT pl.std_id, po.sch_id, po.sup_id
FROM `place` pl
JOIN (
SELECT sch1_id AS sch_id, sup_id
FROM `post`
UNION ALL
SELECT sch2_id AS sch_id, sup_id
FROM `post`
UNION ALL
SELECT sch3_id AS sch_id, sup_id
FROM `post`
UNION ALL
SELECT sch4_id AS sch_id, sup_id
FROM `post`
) AS po ON pl.sch_id = po.sch_id
只需使用 IN()
:
SELECT pl.std_id,pl.sch_id,po.sup_id
FROM `place` pl
INNER JOIN `post` po
ON(pl.sch_id IN(po.sch1_id,po.sch2_id,po.sch3_id))
虽然非常推荐,但无需对数据进行归一化!!您应该重新考虑您的 table 结构。
您似乎想要形成匹配任何 sch* 值的联接,如果是这样,那么一种方法是在联接中使用多个条件:
select sup_id, sch_id, std_id
from post p
join place pl on pl.sch_id = p.sch1_id
or pl.sch_id = p.sch2_id
or pl.sch_id = p.sch3_id