MySQL выбирает несколько строк, равных из строки

У меня есть две таблицы:

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

мой запрос более сложный, я резюмировал проблему

начните с использования явных соединений вместо неявных. Неявные давно устарели

Lelio Faieta 18.04.2019 10:23

Я не понимаю. Возможно, упростите вашу проблему/данные, если это возможно.

Tim Biegeleisen 18.04.2019 10:23
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
2
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы это работало, вам нужно построить таблицу строк из P* столбцов tableA. Затем это можно соединить с tableA для ID_A и с tableB для отдельных значений 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

Демо на dbfiddle

Для Ника: мне жаль, что в вашем коде есть ошибка. Не могли бы вы мне помочь пожалуйста? В строках они не правильно соотнесены, вы можете видеть в примере первая строка, текст должен быть "G" не "F" [Демо по обновлению dbfiddle][1] [1]: db-fiddle.com/f/nRpqNiUmpRVJJ4gMP66Ywn/2

carmelocony 23.04.2019 12:33

@carmelocony не был за моим компьютером, но я ответил на ваш другой вопрос.

Nick 23.04.2019 15:08

Другие вопросы по теме