как проверить две таблицы базы данных на отсутствие информации

0

У меня две таблицы имеют столбцы fname и lname, как бы я написал запрос для проверки и посмотрел, отсутствует ли в одной из таблиц запись, которая не существует в другой таблице?

Вот таблицы и их столбцы

tbl_client
-fname
-lname

tbl_lease
-fname
-lname

Мне нужно продолжить проверку tbl_lease, чтобы увидеть, соответствуют ли записи таблице tbl_client, и если она не сможет отобразить ее для меня. спасибо

Теги:

2 ответа

1

Простым способом было бы использовать предикат not exists в предложении where:

select tbl_client.fname, tbl_client.lname, 'missing from lease' as missingfrom
    from tbl_client
    where not exists
       (select 1 from tbl_lease where tbl_lease.fname=tbl_client.fname
        and tbl_lease.lname=tbl_client.lname)
union
select tbl_lease.fname, tbl_lease.lname, 'missing from client' as missingfrom
    from tbl_lease
    where not exists
       (select 1 from tbl_client where tbl_lease.fname=tbl_client.fname
        and tbl_lease.lname=tbl_client.lname)

Или, возможно, выполнить полное внешнее соединение и проверить, какие записи в таблице являются нулевыми, но это, вероятно, немного менее прямолинейно и может быть менее эффективным, чем not exists.

  • 0
    Если у вас нет совпадающих индексов хотя бы для одного из имен в обеих таблицах, вы можете столкнуться с некоторыми сканированиями таблиц, которые в любом случае могут быть очень медленными. С индексом tbl_client (lname, fname) и индексом tbl_lease (lname, fname) запрос должен быть очень быстрым.
  • 0
    вау спасибо, не знал об этом. при использовании не существует проверяет, что в парантезе не существует или выбор перед не существует
Показать ещё 2 комментария
0

Получить все записи в tbl_lease, где fname отсутствует в tbl_client:

 select tl.* from tbl_lease tl
    left join tbl_client tc on tl.fname = tc.fname 
 where tc.fname is null;

И наоборот, записи присутствуют в tbl_client, где fname отсутствует в tbl_lease

 select tc.* from tbl_client tc
   left join tbl_lease tl on tc.fname = tl.fname 
  where tl.fname is null;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню