Вам нужно просто ВНУТРЕННЕЕ СОЕДИНЕНИЕ :
select s.student_name, c.country_name, p.province_name, d.district_name
from student s
join country c on s.country_id = c.country_id
join province p on p.province_id = s.province_id
join district d on d.district_id = s.district_id;
Предполагая, что country_id
, province_id
и district_id
являются первичными ключами в соответствующих таблицах.
Не изящное решение наверняка, но это не редко для использования словаря (или hashmap). Одно из преимуществ - то, что hashmap имеет постоянное время поиска, таким образом, скорость действительно не страдает здесь.
Не то, чтобы я знаком с C#, но обычно любой тип проверки графика для своего рода обработки потребует, чтобы справочная таблица прекратила обрабатывать объект из-за циклических ссылок. Таким образом, я думал бы, что необходимо будет сделать то же здесь.
Решение для словаря, которое Вы предложили, является лучшим, я знаю о. Для оптимизации далее Вы могли использовать объект. GetHashCode () для получения хеша для объекта и использования, что как ключ словаря. Должно быть быстрым, если Вы не говорите об огромных деревьях объектов (10-е к 100 с тысяч объектов).
возможно, создайте немного флага, чтобы указать, был ли этот объект клонирован прежде.
Другое возможное решение, которое Вы могли исследовать, сериализирует объекты в поток и затем восстанавливает их от того же самого потока в новые экземпляры. Это часто творит чудеса, когда все остальное кажется ужасно замысловатым и грязным.
Marc