Путаница в левом соединении с двумя таблицами - PullRequest
0 голосов
/ 21 октября 2019

Спасибо, что прочитали мой вопрос. Пожалуйста, будьте любезны поддержать меня!

Я несколько раз пытался получить вывод ниже, используя запрос LEFT JOIN, соединяющий Activity_Table и Custom_field_Table, но не смог найти правильный запрос.

Любые советы, помощь, указатели приветствуются!

enter image description here

enter image description here

enter image description here

Ответы [ 4 ]

0 голосов
/ 22 октября 2019

Этот запрос даст вам нужный результат. Но вам нужно быть более конкретным в том, что вы пытались (требование).

SELECT 
    x.* 
FROM (
    SELECT 
        a.activity_id, a.activity_name,
        IF(a.pos_id = b.id, b.name, null) AS pos_name,
        IF(a.op_id = b.id, b.name, null) AS op_name
    FROM 
        activity_table a 
    JOIN
        custom_field_table b 
) x
WHERE 
    x.pos_name IS NOT NULL AND x.op_name IS NOT NULL;

Однако приведенный выше запрос будет перекрестным соединением, поскольку нет никаких условий соединения. Предложение where (в этом запросе) гарантирует, что вы получите только те строки, в которых оба - pos_name и op_name не пусты.

0 голосов
/ 21 октября 2019

@ Savi

select 
    activity_id, activity_name, a.name pos_name, b.name op_name 
from 
    activity_table, custom_field_table a , custom_field_table b  
where 
    pos_id=a.id and op_id=b.id 
order by activity_id

В приведенном выше примере, так как вы используете общую справочную таблицу, вам нужно соединить два раза одну и ту же таблицу. с двумя разными ссылками. Надеюсь, это поможет!

0 голосов
/ 21 октября 2019

Вы можете сделать 2 сустава:

Select Activity_id,Activity_name,tmp1.name as Pos_name,tmp2.name as op_name from Activity_table at
left join custom_field_table tmp1 on tmp1.id = at.pos_id
left join custom_field_table tmp2 on tmp2.id = at.op_id
order by activity_id

См. Скрипку

0 голосов
/ 21 октября 2019

Вы можете left join дважды:

select 
    a.activity_id,
    a.activity_name,
    cp.name pos_name,
    co.name op_name
from activity_table a
left join custom_field_table cp on cp.id = a.pos_id
left join custom_field_table co on co.id = a.op_id
...