как ограничить содержимое строки в нескольких JOIN - PullRequest
0 голосов
/ 17 июня 2020

Обновлено в соответствии с рекомендациями Strawberry

Я работаю над базой данных, которая обрабатывает игровые карты и создает представление.

select 
kort_info.id, 
kk_b.Antall as 'kk_b.Antall',  
kk_b.Kjop_id as 'kk_b.Kjop_id', 
kk_c.Antall as 'kk_c.Antall',
kk_c.Kjop_id as 'kk_c.Kjop_id'
from kort_info
left join kort_kjopt kk_b on kort_info.id = kk_b.kort_id and kk_b.kort_type like 'b' 
left join kort_kjopt kk_c on kort_info.id = kk_c.kort_id and kk_c.kort_type like 'c' 
+----------------+--------------+---------------+--------------+---------------+
|                                  Result                                      |
+----------------+--------------+---------------+--------------+---------------+
| id             |  kk_b.Antall |  kk_b.Kjop_id |  kk_c.Antall |  kk_c.Kjop_id |
+----------------+--------------+---------------+--------------+---------------+
| 5879           | 1            | 23            | 2            | 18            |
| 5902           | 3            | 23            | 4            | 23            |
+----------------+--------------+---------------+--------------+---------------+
|                                Desired result                                |
+----------------+--------------+---------------+--------------+---------------+
| id             |  kk_b.Antall |  kk_b.Kjop_id |  kk_c.Antall |  kk_c.Kjop_id |
+----------------+--------------+---------------+--------------+---------------+
| 5879           |              |               | 2            | 18            |
| 5879           | 1            | 23            |              |               |
| 5902           | 3            | 23            | 4            | 23            |
+----------------+--------------+---------------+--------------+---------------+

Моя проблема в том, как ПРИСОЕДИНЯТЬСЯ к одной и той же таблице несколько раз. Моя проблема в том, как JOIN обрабатывает Kort_kjopt.kjop_id. Это значение, которое я не могу контролировать с помощью Kort_info.

У меня есть таблица с информацией о картах. Kort_info.ID используется для идентификации карт.

+--------------+
| Kort_info.ID |
+--------------+
|         5879 |
|         5902 |
+--------------+

Kort_kjopt - это таблица о купленных картах Kort_kjopt.Kort_id подключен к kort_info.ID Kort_kjopt.kort_type определяет, к какому JOIN он подключен к Kort_kjopt .kjop_id - это место, где появляется проблема.

+----------+------------+----------+---------+
|                    Kort_kjopt              |
+----------+------------+----------+---------+
|  kort_id |  kort_type |  Kjop_id |  Antall |
+----------+------------+----------+---------+
|     5879 | B          |       23 |       1 |
|     5879 | C          |       18 |       2 |
|     5902 | B          |       23 |       3 |
|     5902 | C          |       23 |       4 |
+----------+------------+----------+---------+

kjop_id исключен только в Kort_kjopt и не может быть связан с Kort_info

Мне нужно ограничить, какие значения Kort_kjopt.kjop_id может располагаются в том же ряду. Как мне получить одинаковое значение kk_b.Kjop_id и kk_ c .Kjop_id в строке

Речь идет не о наследовании

card_id 5879 делится на две разные строки

1 Ответ

0 голосов
/ 26 июня 2020

Я обнаружил, что лучше подключить 3 kort_kjopt к одному kort_kjopt, который работал как связующее звено между ними.

SELECT 
kort_kjopt.kort_id,
kort_kjopt.Kjop_id,
kk_a.Antall as 'kk_a.Antall',  
kk_a.Kjop_id as 'kk_a.Kjop_id', 
kk_b.Antall as 'kk_b.Antall',  
kk_b.Kjop_id as 'kk_b.Kjop_id', 
kk_c.Antall as 'kk_c.Antall',
kk_c.Kjop_id as 'kk_c.Kjop_id'
FROM 
poketech.kort_kjopt
left join kort_kjopt kk_a on kk_a.kort_id = kort_kjopt.kort_id and kk_a.Kjop_id = kort_kjopt.Kjop_id and kk_a.kort_type = 'A'
left join kort_kjopt kk_b on kk_b.kort_id = kort_kjopt.kort_id and kk_b.Kjop_id = kort_kjopt.Kjop_id and kk_b.kort_type = 'B'
left join kort_kjopt kk_c on kk_c.kort_id = kort_kjopt.kort_id and kk_c.Kjop_id = kort_kjopt.Kjop_id and kk_c.kort_type = 'C'
where kort_kjopt.kort_id in (5879,5902)
group by kort_kjopt.Kjop_id, kort_kjopt.kort_id
...