mysql选择多行等于行

问题描述 投票:1回答:1

我有两张桌子:

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

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

mysql select where operator-keyword
1个回答
1
投票

要完成这项工作,你必须从P*tableA列构建一个行表。然后可以将其与tableA上的ID_AtableB中的P*值相关联:

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

© www.soinside.com 2019 - 2024. All rights reserved.