SQL выбрать данные из таблицы поиска с 2 таблицами и условием - PullRequest
0 голосов
/ 14 мая 2019

Если я сделаю запрос по '08', поищу в таблице1 id_code1 в позиции 3, то получу, какой id_code1 содержит '08', затем выберу данные из таблицы2 и получу id_code2 для выбора данных из таблицы3

У меня есть3 таблицы, Таблица 1. содержит id_code1 и id_code2, которые представляют собой строку

table1

id_code1  |   id_code2
----------+--------------
1008SD7X  |    M71X456700
1008DG5B  |    N71X456800
100894EX  |    P71X456900
1064TESE  |    Q71X456135
19745EGS  |    R71X456789
10DFEE77  |    S71X456239
1EERSD7X  |    S86X436477


table2 содержит id_code1, data1, data2,data3

id_code1  |   data1  |  data2  |  data3  |
----------+----------+---------+---------+
1008SD7X  |   12.9   |  10     |   7.5   |
1008DG5B  |   13.8   |  10     |   4.2   |
100894EX  |   15.4   |  11     |   3.0   |
1064TESE  |   12.7   |  12     |   2.5   |
19745EGS  |   14.2   |  12     |   5.5   |
10DFEE77  |   12.5   |  11     |   4.7   |
1EERSD7X  |   15.5   |  10     |   3.5   |

table3 содержит id_code2, data4, data5, data6

id_code1   | data4  |  data5  | data6 |
-----------+--------+---------+-------+
M71X456700 |   29   |  11     |   5   |
N71X456800 |   38   |  18     |   2   |
P71X456900 |   34   |  11     |   3   |
Q71X456135 |   47   |  12     |   5   |
R71X456789 |   12   |  14     |   5   |
S71X456239 |   15   |  11     |   4   |
S86X436477 |   15   |  19     |   3   |

Теперь я не могу выбрать table3 с таблицей2

select table3.* from table3
where table3.id_code2 in 
        ( select table1.id_code2 
        from table1 where 
        locate('08',table1.id_code1)=3)
id_code1   | data4  |  data5  | data6 |
-----------+--------+---------+-------+
M71X456700 |   29   |  11     |   5   |
N71X456800 |   38   |  18     |   2   |
P71X456900 |   34   |  11     |   3   |

Я ожидаю такой результат

id_code1  | id_code2  |  data1 |  data2  | data3  |  data4 | data5  | data6 
----------+-----------+--------+---------+--------+--------+--------+-------
1008SD7X  |M71X456700 | 12.9   |  10     |   7.5  |  29   |  11     |   5   |
1008DG5B  |N71X456800 | 13.8   |  10     |   4.2  |  38   |  18     |   2   |
100894EX  |P71X456900 | 15.4   |  11     |   3.0  |  34   |  11     |   3   |

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Вам необходимо присоединиться к table1 с table2 и table3:

select
  t1.id_code1, t1.id_code2,
  t2.data1, t2.data2, t2.data3,
  t3.data4, t3.data5, t3.data6
from table1 t1
inner join table2 t2 on t2.id_code1 = t1.id_code1
inner join table3 t3 on t3.id_code2 = t1.id_code2
0 голосов
/ 14 мая 2019

Что-то вроде этих строк должно сделать это:

SELECT  t1.id_code1,
        t1.id_code2,
        t2.data1,
        t2.data2,
        t2.data3,
        t3.data4,
        t3.data5,
        t3.data6
  FROM  table1 t1
    INNER JOIN table2 t2 ON t2.id_code1 = t1.id_code1
    INNER JOIN table3 t3 ON t3.id_code2 = t1.id_code2
  WHERE LOCATE('08', t1.id_code1) = 3;

Это возвращает все строки из table1, которые соответствуют вашему предложению WHERE, присоединяется к table2 и table3 и возвращает соответствующие столбцыиз этих таблиц.

Результаты:

id_code1  id_code2    data1  data2  data3  data4  data5  data6
1008SD7X  M71X456700  12.9   10     7.5    29     11     5
1008DG5B  N71X456800  13.8   10     4.2    38     18     2
100894EX  P71X456900  15.4   11     3      34     11     3

Обратите внимание, что я изменил имя id_code1 на id_code2 в table3, потому что я предположил, что это связано сопечатка.

Рабочая SQL Fiddle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...