Поиск пропущенных строк в многотабличной базе данных MySQL - PullRequest
0 голосов
/ 29 сентября 2011

Я только начал работать с базой данных MySQL, которую кто-то другой собрал, и я пытаюсь ее очистить. Для моей проблемы есть три соответствующих таблицы: таблица с перечнем аукционов, таблица с указанием лотов, проданных на каждом аукционе, и таблица с перечнем платежей по каждому лоту.

Таблица аукционов использует первичный ключ для идентификации каждого аукциона, и у каждого лота есть этот ключ, чтобы идентифицировать его с аукционом. Аналогично, у каждого лота есть свой ключ, который каждый платеж использует для идентификации его с лотом. На каждом аукционе должен быть хотя бы один лот, а на каждый лот должен быть хотя бы один платеж. Ни один платеж не должен быть привязан к лоту, у которого нет строки в таблице лотов, и ни один лот не должен быть прикреплен к аукциону, у которого нет строки в таблице аукционов. Я пытаюсь разработать запрос, который позволит мне найти строки, нарушающие это правило - например, пропущенные лоты в таблице лотов или дополнительные платежи, к которым не прикреплено много.

В данный момент я делаю отдельный запрос на подсчет, который дает мне количество лотов / аукционов, указанных в соответствующих таблицах, но если числа не совпадают, это не помогает мне найти, какие из них отсутствуют. Есть ли запрос, который я могу использовать, чтобы найти пропущенные строки?

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

Вы можете проверить наличие ключей в соответствующих таблицах.

Select a.* from Auction a
Left Join Lot l on l.key = a.key
where l.key is null

или

select * from Auction a
where a.key not in (select key from lot)

что-то вроде этого поможет вам. вам нужно изменить имена таблиц и столбцов, чтобы они соответствовали, а затем написать сценарий для других подходящих случаев, но логика должна быть схожей. надеюсь, это поможет.

0 голосов
/ 29 сентября 2011

Что-то вроде,

SELECT lot.pk из лота ГДЕ lot.fk НЕ ВХОДИТ (ВЫБЕРИТЕ DISTINCT (auction.pk) ОТ Аукциона)

выдаст вам лоты, прикрепленные к несуществующим аукционам, измените, как требуется для других ваших ситуаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...