предпочитает таблицу 3 таблице 2 и таблице 2 таблице 1

#sql

#sql

Вопрос:

У меня есть 3 таблицы с именами и количеством нескольких моих друзей.

Таблица 3 содержит правильные данные, таблица 2 содержит незначительные ошибки в данных, а таблица 1 содержит больше, чем таблица 2.

если пользователь существует в таблицах 2 и 3, то покажите сведения о таблице 3 в выходных данных, иначе сведения о таблице 2, если пользователя даже нет в таблице 2, тогда покажите данные пользователя из таблицы1.

больше похоже на порядок предпочтений.

ФИКТИВНЫЕ ДАННЫЕ:

 table 1 :

name phone
abc   2343
bcd   3434
ccd   3455
ffc   4545

table 2 :

name phone
abc   2313
bcd   3414
ccd   3415


table 3 :

name phone
abc   2344
bcd   3431
  

ожидаемый результат :

 name phone
abc   2344
bcd   3431
ccd   3415
ffc   4545
  

Я попробовал этот запрос, но не смог найти правильный вывод.

 select phone,
    coalesce(table1.name, TABLE2.name,TABLE3.name) as namee
FROM   TABLE1
       left JOIN TABLE2 
               ON table1.name = table2.name
       INNER JOIN table3
               ON table3.name = table2.name
  

Было бы огромным, огромным heeelppppp.

Ответ №1:

Гордон был близок; у него было предпочтение наоборот. Пожалуйста, убедитесь, что вы понимаете, почему работает скрипт.

 -- grab all our preferred data first
select t3.*
from table3 t3

union all

-- grab anything that doesn't exist in our preferred table
select t2.*
from table2 t2
where not exists (select 1 from table3 t3 where t3.name = t2.name)

union all

-- grab anything that doesn't exist in our preferred tables
select t1.*
from table1 t1
where not exists (select 1 from table2 t2 where t2.name = t1.name) and
      not exists (select 1 from table3 t3 where t3.name = t1.name);
  

Ответ №2:

Используйте union all :

 select t1.*
from table1 t1
union all
select t2.*
from table2 t2
where not exists (select 1 from table1 t1 where t1.name = t2.name)
union all
select t3.*
from table3 t3
where not exists (select 1 from table1 t1 where t1.name = t3.name) and
      not exists (select 1 from table2 t2 where t2.name = t3.name);
  
  

Комментарии:

1. Выдает неверный вывод, я получаю «abc» из таблицы 1, а не из таблицы 3

2. и получение «bcd» из таблицы 2, а не из таблицы 3

3. @yono . , , Если ваш заказ table1 -> таблица 3 -> таблица 2, просто поменяйте имена таблиц местами.