Рассмотрим следующий многие-ко-многим таблице:самоприсоединение таблицы и сопоставления нескольких строк
FK_Composition | FK_Part | Position | Quantity
---------------+---------+----------+---------
101 | 2001 | -3 | 1
101 | 2002 | -2 | 2
101 | 2003 | -1 | 1
101 | 2011 | 0 | 1
102 | 2001 | -2 | 1
102 | 2002 | -1 | 2
102 | 2003 | 0 | 1
102 | 2012 | 1 | 1
Цель состоит в том, чтобы найти композиции, которые в значительной степени такой же, как в определенной композиции по comparisson. «Довольно много» смысл:
- сравниваемых композиция состоит из одних и тех же частей, что и оригинал, кроме части с самым высоким положением
- Все части должны быть на одних и тех же относительно позиции (позиции [-3, -2, -1,0] допускается при сравнении композиции с позициями [-1,0,1,2])
- Каждое происхождение части должно иметь такое же количество
- сравниваемая композиция не имеет больше частей, чем оригинал
Идя по этим правилам, состав 102 в значительной степени же, как 101.
Конечно, есть более интересно было с моим вопросом: Наша Entity Framework позволяет только использование простых запросах ВЫБОРА и, мы должны поддерживать как базы данных SQL Server, так и Access «Базы данных». Запрос должен поддерживать обе системы, а временные таблицы и циклы - это не выход.
Я работал с разными базами данных некоторое время, но я не помню, что мне когда-либо приходилось сопоставлять несколько значений из нескольких строк в самосоединении, как это раньше. Тем не менее, я считаю разумным предположить, что должен быть быть простым способом достичь этого. Здесь?
Вопрос с бонусом: я собираюсь запросить данные, которые мне нужны в отдельных частях нашего приложения .NET, и пусть Linq делает свою магию, но есть опасения, что компьютеры некоторых клиентов могут не очень хорошо обрабатывать слишком много встроенной памяти данные. Мы говорим о данных, возможно, до миллиона строк, в зависимости от баз данных клиентов. Является ли это серьезной проблемой?
Edit - В соответствии с просьбой в комментариях, вот некоторые контрпримеры с композициями, которые не должны соответствовать по сравнению с составом 101:
FK_Composition | FK_Part | Position | Quantity | Reason
---------------+---------+----------+----------+------
151 | 2001 | -3 | 1 | Part 2004 is no match
151 | 2002 | -2 | 2 |
151 | 2004 | -1 | 1 |
151 | 2011 | 0 | 1 |
152 | 2001 | -2 | 1 | Has a different number of parts
152 | 2002 | -1 | 2 |
152 | 2012 | 0 | 1 |
153 | 2001 | 1 | 2 | Position 1 has the wrong quantity
153 | 2002 | 2 | 2 |
153 | 2004 | 3 | 1 |
153 | 2011 | 4 | 1 |
Возможно, вы должны добавить намного больше тестовых примеров, чтобы объяснить несколько других нюансов. Например, они должны иметь одинаковое количество деталей? Например. что если 103 имеет 6 частей и первые 3 соответствуют первым 3 из 101, это будет близкое совпадение? – Matt
Я думаю, 1) говорит, что они должны иметь одни и те же части (кроме самого высокого положения). Но я согласен, что больше примеров будет очень полезно - по крайней мере, контрпример из чего-то, что не должно совпадать. Также вы когда-нибудь получите набор позиций, которые не являются последовательными, например. (1,2,2,3) или (1,3,6578)? И нужно ли соответствовать самой высокой части? –
@Matt Да, они имеют одинаковое количество деталей. И количество позиций, и количество каждой позиции должны совпадать. –