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

我的查询比较复杂,我总结了问题

要完成这项工作,您必须从 tableAP* 列构建 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

Demo on dbfiddle