Member 11856456 Ответов: 2

Как я могу найти номер строки таблицы в исходной таблице из внутреннего соединения


Я пытаюсь выполнить поиск, основанный на внутреннем соединении. Я объединяю записи о рождении, смерти и кладбище. Тем не менее, я ищу, чтобы обновить определенные строки, которые могут быть в одной из таблиц.
Проблема в том, что когда я использую внутреннее соединение, оно будет показывать только тех людей, которые идеально совпадают между всеми тремя таблицами. Итак, если у меня есть 100 человек и только 80 из них имеют записи о смерти и кладбище, то только эти строки заполняют таблицу данных. Это означает, что 20 строк из 100 отсутствуют. Любые предложения о том, как продолжить поиск фактического номера строки, связанного с данными из оператора inner join, по сравнению с таблицами, из которых он исходит

например,

Рождение может быть строкой 1 в таблице рождений
Смерть может быть строкой 60 в таблице смертей
а кладбище может быть 70 в кладбищенской таблице

Мне нужно знать эти позиции для моего заявления об обновлении данных.

Что я уже пробовал:

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

2 Ответов

Рейтинг:
19

MadMyche

Измените его, чтобы использовать OUTER JOIN вместо

SELECT    b.BirthIndex,    b.{other data}
     ,    d.DeathIndex,    d.{other data}
     ,    c.CemeteryIndex, c.{other data}
FROM      BirthRecords           b
LEFT OUTER JOIN DeathRecords     d ON b.PersonID = d.PersonID
LEFT OUTER JOIN CemeteryRecords  c ON b.PersonID = c.PersonID

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

То, что вам нужно будет учитывать в вашем коде, - это то, что вы собираетесь получить значение null для DeathIndex и/или CemetaryIndex, если нет соответствующей записи.

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


Member 11856456

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

Например

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

MadMyche

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

Рейтинг:
1

Dave Kreskowiak

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

Вот почему таблицы должны иметь первичные ключи и ссылки на ключи в других таблицах, называемых внешними ключами.