У меня проблемы с «сложным» выбором. У меня есть разные таблицы (один год), и они выглядят как:Выбор MySQL, подзапросы и т. Д.
В прошлом году:
ShortName LongName Year
Nam1 Name One 2016
Nam2 Name Two 2016
...
Namn Name N 2016
Год 2015
ShortName LongName Year
Nam1 Name AltOne 2015
Nam4 Name AltFour 2015
...
Namn Name AltN 2015
То есть, когда человек появляется в двух (или более) лет, наблюдения имеют одно и то же ShortName, но LongName может отличаться каждый год. Люди могут (или не могут) повторяться на протяжении многих лет.
Я хочу выбрать последнее LongName для всех лиц во всех таблицах. Я имею в виду, что отдельный Nam1 появится в 2016 году и в 2015 году. Я хочу выбрать ее последнее доступное LongName, которое является «Name One». То же самое относится к Nam2.
Nam4 НЕ появляется в 2016 году, но в 2015 году, поэтому я хочу выбрать «Name AltFour».
Окончательный выбор будет:
ShortName LongName Year
Nam1 Name One 2016
Nam2 Name Two 2016
Nam4 Name AltFour 2015
Namn Name N 2016
У меня есть таблицы с 2016 до 2013 г. Большое спасибо за вашу помощь.
Первое правило баз данных, не разбивайте таблицу в 4 разных таблицах на 4 года. Второе правило баз данных не разбивает таблицу в 4 разных таблицах на 4 года. Вы можете устранить свою ошибку, кроме того, что она медленная из-за не использования хороших индексов, с помощью «union all», а затем запросить ее, как если бы она была только одной таблицей: 'select * from (select * from table1 union all выберите * from table2 union all ...) a, где не существует (выберите * from (выберите * из table1 union all select * from table2 union all ...) a1 где a1.Shortname = a.Shortname и a.Year
Solarflare
Спасибо за ваш комментарий. Причина, почему у меня разные таблицы, заключается в том, что у меня разные переменные за каждый год, кроме соответствующих проблем. – Javi
Javi, вам, вероятно, было бы лучше создавать таблицы для различных наборов переменных, связанных с таблицей «годы». – Uueerdo