#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, просто поменяйте имена таблиц местами.