mysql select 多行等于行
mysql select multi rows equal from row
我有两个表:
TableA TableB
ID_A ID_B
P1 Text
P2
P3
P4
TableB
ID_B Text
1 Bla
2 Blabla
3 Bla bla ecc
4 Bla Bla
5 Bla bla Bla
6 Bla bla bla bla
7 Bla bli
TableA
ID_A P1 P2 P3 P4
1 5 6 6 6
SELECT ID_A, P1, P2, P3, P4,
ID_B, Text
FROM TableA, TableB
WHERE (TableA.P1 = TableB.IDB) OR
(TableA.P2 = TableB.IDB) OR
(TableA.P3 = TableB.IDB) OR
(TableA.P4 = TableB.IDB);
我得到:
ID_A P1 P2 P3 P4 ID_B Text
1 5 6 6 6 5 Bla bla Bla
1 5 6 6 6 6 Bla bla bla bla
我怎样才能得到这个?
ID_A P1 P2 P3 P4 ID_B Text
1 5 6 6 6 5 Bla bla Bla
1 5 6 6 6 6 Bla bla bla bla
1 5 6 6 6 6 Bla bla bla bla
1 5 6 6 6 6 Bla bla bla bla
我的查询比较复杂,我总结了问题
要完成这项工作,您必须从 tableA
的 P*
列构建 table 行。然后可以将其连接到 ID_A
上的 tableA
和单个 P*
值上的 tableB
:
SELECT a.*, b.*
FROM (SELECT ID_A, P1 AS P FROM TableA
UNION ALL
SELECT ID_A, P2 FROM TableA
UNION ALL
SELECT ID_A, P3 FROM TableA
UNION ALL
SELECT ID_A, P4 FROM TableA) p
JOIN TableA a ON a.ID_A = p.ID_A
JOIN TableB b ON b.ID_B = p.P
ORDER BY a.ID_A, b.ID_B
输出(对于我的扩展演示):
ID_A P1 P2 P3 P4 ID_B Text
1 5 6 6 6 5 Bla bla Bla
1 5 6 6 6 6 Bla bla bla bla
1 5 6 6 6 6 Bla bla bla bla
1 5 6 6 6 6 Bla bla bla bla
2 3 4 5 6 3 Bla bla ecc
2 3 4 5 6 4 Bla Bla
2 3 4 5 6 5 Bla bla Bla
2 3 4 5 6 6 Bla bla bla bla
我有两个表:
TableA TableB
ID_A ID_B
P1 Text
P2
P3
P4
TableB
ID_B Text
1 Bla
2 Blabla
3 Bla bla ecc
4 Bla Bla
5 Bla bla Bla
6 Bla bla bla bla
7 Bla bli
TableA
ID_A P1 P2 P3 P4
1 5 6 6 6
SELECT ID_A, P1, P2, P3, P4,
ID_B, Text
FROM TableA, TableB
WHERE (TableA.P1 = TableB.IDB) OR
(TableA.P2 = TableB.IDB) OR
(TableA.P3 = TableB.IDB) OR
(TableA.P4 = TableB.IDB);
我得到:
ID_A P1 P2 P3 P4 ID_B Text
1 5 6 6 6 5 Bla bla Bla
1 5 6 6 6 6 Bla bla bla bla
我怎样才能得到这个?
ID_A P1 P2 P3 P4 ID_B Text
1 5 6 6 6 5 Bla bla Bla
1 5 6 6 6 6 Bla bla bla bla
1 5 6 6 6 6 Bla bla bla bla
1 5 6 6 6 6 Bla bla bla bla
我的查询比较复杂,我总结了问题
要完成这项工作,您必须从 tableA
的 P*
列构建 table 行。然后可以将其连接到 ID_A
上的 tableA
和单个 P*
值上的 tableB
:
SELECT a.*, b.*
FROM (SELECT ID_A, P1 AS P FROM TableA
UNION ALL
SELECT ID_A, P2 FROM TableA
UNION ALL
SELECT ID_A, P3 FROM TableA
UNION ALL
SELECT ID_A, P4 FROM TableA) p
JOIN TableA a ON a.ID_A = p.ID_A
JOIN TableB b ON b.ID_B = p.P
ORDER BY a.ID_A, b.ID_B
输出(对于我的扩展演示):
ID_A P1 P2 P3 P4 ID_B Text
1 5 6 6 6 5 Bla bla Bla
1 5 6 6 6 6 Bla bla bla bla
1 5 6 6 6 6 Bla bla bla bla
1 5 6 6 6 6 Bla bla bla bla
2 3 4 5 6 3 Bla bla ecc
2 3 4 5 6 4 Bla Bla
2 3 4 5 6 5 Bla bla Bla
2 3 4 5 6 6 Bla bla bla bla