MySQLは行から等しい複数の行を選択します

MySQLは行から等しい複数の行を選択します

タグ:



質問

2つのテーブルがあります。

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* 列から行のテーブルを作成する必要があります。次に、これを 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

dbfiddleのデモ






source
MySQLは複数の値に等しい場所を選択します
最初のn-charsが等しい行を選択する(MySQL)
MySQLでプライマリキーで複数の行を選択するには?
MySQLで複数の一意の行を選択する
MySQL – ユーザーの選択に従って列 ‘名前’を選択 列 ‘id’と ‘parent’の行が互いに等しい
MySQL:複数のオカレンスを持つ行を選択する
複数の列にない行を選択するmysql
awkはすべての列が等しい行を選択します
MySQL – 複数の行を返す選択で複数の列を更新する
MySQLで複数列の主キーで複数の行を選択するには?
Rating