выбрать данные Пересечение / внутреннее соединение MySql - PullRequest
0 голосов
/ 08 мая 2020

у меня в базе данных две таблицы

tb_bengkel, это данные tb_bengkel

+------------+--------------+----------------+--------------+
| id_bengkel | nama_bengkel | alamat_bengkel | id_sparepart |
+------------+--------------+----------------+--------------+
|          1 | sejahtera    | jl psm         | 1,2          |
|          2 | abadi        | jl jakarta     | 1            |
|          3 | toyota       | jl soeta       | 3            |
|          4 | honda        | jl cikapundung | 1,2,3        |
+------------+--------------+----------------+--------------+

tb_ranking, а это данные tb_ranking

+------------+--------------+------------------+---------------------+---------+--------------+
| id_ranking | id_kendaraan | total            | tanggal             | service | id_sparepart |
+------------+--------------+------------------+---------------------+---------+--------------+
|         79 | 12           | 0.77386363636364 | 2020-05-03 11:01:00 |       0 | 1            |
|         80 | 10           | 0.68516666666667 | 2020-05-03 11:01:00 |       0 | 1,2          |
|         81 | 22           | 0.67926571428571 | 2020-05-05 13:01:00 |       0 | 1,2,3        |
|         82 | 11           | 0.61842857142857 | 2020-05-04 13:01:00 |       0 | 2            |
+------------+--------------+------------------+---------------------+---------+--------------+

i есть поле id_sparepart в tb_bengkel и tb_ranking, и я хочу выбрать данные, где id_sparepart в tb_bengkel - это содержимое id_sparepart в tb_ranking

Я пробую этот запрос,

select tb_bengkel.id_bengkel,tb_bengkel.nama_bengkel,tb_bengkel.id_sparepart, tb_ranking.id_ranking,tb_ranking.id_sparepart
from tb_bengkel inner join tb_ranking
on tb_bengkel.id_sparepart=tb_ranking.id_sparepart;

результат запроса:

+------------+--------------+--------------+------------+--------------+
| id_bengkel | nama_bengkel | id_sparepart | id_ranking | id_sparepart |
+------------+--------------+--------------+------------+--------------+
|          2 | abadi        | 1            |         79 | 1            |
|          1 | sejahtera    | 1,2          |         80 | 1,2          |
|          4 | honda        | 1,2,3        |         81 | 1,2,3        |
+------------+--------------+--------------+------------+--------------+

, но данные, которые должны появиться, это данные в tb_ranking, чей id_sparepart доступен в tb_bengkel, например, id_ranking 79 имеет id_sparepart 1, тогда должно появиться 3 в

+------------+--------------+--------------+------------+--------------+
| id_bengkel | nama_bengkel | id_sparepart | id_ranking | id_sparepart |
+------------+--------------+--------------+------------+--------------+
|          1 | sejahtera    | 1,2          |         79 | 1            |
|          2 | abadi        | 1            |         79 | 1            |
|          4 | honda        | 1,2,3        |         79 | 1            |
+------------+--------------+--------------+------------+--------------+

, потому что id_bengkel имеет доступность id_sparepart 1

пример 2, в id_ranking 82 есть id_sparepart 2, тогда должны появиться данные

+------------+--------------+--------------+------------+--------------+
| id_bengkel | nama_bengkel | id_sparepart | id_ranking | id_sparepart |
+------------+--------------+--------------+------------+--------------+
|          1 | sejahtera    | 1,2          |         82 | 2            |
|          4 | honda        | 1,2,3        |         82 | 2            |
+------------+--------------+--------------+------------+--------------+

какой запрос мне следует использовать?

1 Ответ

0 голосов
/ 28 мая 2020
select * from tb_ranking join tb_bengkel on tb_bengkel.spare LIKE CONCAT( '%', tb_ranking.spare,'%' ) ORDER BY `tb_ranking`.`rank` ASC

использование условия соединения like on даст результат u, основанный на условии - при условии, что столбец id_sparepart является varchar

...