возможно левое соединение с манипулированием значениями столбца и проверкой условий - PullRequest
0 голосов
/ 05 мая 2020
SELECT *
FROM table1 t1 
LEFT JOIN table2 t2 ON t1.field_id = t2.field_id 
WHERE t2.field_id IS NOT NULL

enter image description here

  • Я пытаюсь получить field_value из table 1, которого нет в table 2

  • И добавьте строку в таблицу 2 и установите is_selected = 0

Я пробовал с join на t1.field_id = t2.field_id и t1.value_id != t2.field_value_lookup

Table 1             
value_id    field_id    title       
25            14    readonly1       
26            14    readonly2       
27            14    readonly3       
1             13    optionA     
2             13    optionB     

Таблица 2

user_id   field_id  type_id field_value_lookup  is_selected
260073      14       11       26                  0
260073      14       11       27                  1

Ожидаемый результат в Таблице 2

user_id    field_id type_id field_value_lookup  is_selected
260073         14     11            26            0
260073         14     11            27            1
260073         14     11            25            0

1 Ответ

0 голосов
/ 05 мая 2020

Предполагается, что Microsoft SQL Сервер

непроверено

select t2.user_id, t2.field_id, t2.type_id, t1.value_id field_value_lookup, 0 is_selected
from ( -- get the distinct existing information from table2 without field_value_lookup
   select distinct user_id, field_id, type_id
   from table2
) t2
inner join table1 t1 on t1.field_id = t2.field_id -- add all the values from table1
where not exists (select 1 -- exclude the rows that already exist
                  from table2
                  where user_id = t2.user_id
                     and field_id = t2.field_id
                     and type_id = t2.type_id
                     and field_value_lookup = t1.value_id
                  )
...