|
Left Join
|
|||
---|---|---|---|
#18+
Здравствуйте. У меня в таблице A хранятся данные в виде: Код: c# 1. 2. 3.
В таблице B в виде: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
В итоге нужно получить таблицу: Код: c# 1. 2. 3.
В данном случае tarid 4 вида, но это значение является входным параметром, т.е. изменяется. Т.е. к таблице A нужно применять left join в данном примере 4 раза, меняя при каждом последущем запросе tarid. Подскажите, пожалуйста, как это можно сделать, чтоб не лепить цикл? И, может быть, здесь применить Enumerable.GroupJoin, он сможет вот так перебрать? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 17:05 |
|
Left Join
|
|||
---|---|---|---|
#18+
Как тебе такой костыль? Я не знаю есть ли в MS SQL всякие хитрые pivot'ы Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
nameid_t2val1val2val3val4name 1128302729name 2258606268 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 18:07 |
|
Left Join
|
|||
---|---|---|---|
#18+
Lord BritishЯ не знаю есть ли в MS SQL всякие хитрые pivot'ы http://codearticles.ru/Home/Catalogs/403 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 18:19 |
|
Left Join
|
|||
---|---|---|---|
#18+
Спасибо за ответ. Сразу не уточнил, мне нужно использовать Linq, т.к. БД разные могуь использоваться. Т.е. что-то вроде такого (в реальности таблиц больше конечно): Код: c# 1. 2. 3. 4. 5. 6. 7.
Вместо for будет использоваться массив со значениями, ну а вот запросы на выходе записывать бы как последущие стобцы, например, в IEnumerable. Т.е. "A" в запросе - тип IEnumerable, "B" - таблица или тоже IEnumerable. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 18:29 |
|
Left Join
|
|||
---|---|---|---|
#18+
МСУ, Оно у меня просит регистрацию. С моим интернетом зарегать фейкомыльце весьма проблематично. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 18:38 |
|
Left Join
|
|||
---|---|---|---|
#18+
Meshelмне нужно использовать Linq, т.к. БД разные могуь использоваться. Ты опять ничего конкретного не сказал. Тебе нужен LINQ-запрос с трансляцией в SQL или просто локальный цикл? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 18:39 |
|
Left Join
|
|||
---|---|---|---|
#18+
Lord BritishМСУ, Оно у меня просит регистрацию. С моим интернетом зарегать фейкомыльце весьма проблематично. Регистрация только на скачивание файлов. Вот этого рецепта тебе вполне хватит. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 18:41 |
|
Left Join
|
|||
---|---|---|---|
#18+
Meshel Сразу не уточнил, мне нужно использовать Linq, т.к. БД разные могуь использоваться . Можно попробовать запилить на Entity SQL + UDF для такой вот гадости min(case tarid when 1 then val else null end). Будете генерить Entity SQL аналогично примеру выше, должно получиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 18:49 |
|
Left Join
|
|||
---|---|---|---|
#18+
МСУ, поглядел пример, со стандартным pivot'ом гоже получается, спору нет, спасибо за ссылку. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 19:00 |
|
Left Join
|
|||
---|---|---|---|
#18+
Из Linq будет транслироваться в SQL и использоваться на разных СУБД. А как можно генерить строчки case? И можно ли как-нибудь иначе сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 19:17 |
|
Left Join
|
|||
---|---|---|---|
#18+
MeshelИз Linq будет транслироваться в SQL и использоваться на разных СУБД. LINQ-транслятор не поддерживает пивоты, забудь о трансляции. MeshelА как можно генерить строчки case? В строку, а после строку на исполнение запроса. MeshelИ можно ли как-нибудь иначе сделать? Можно. Написать хранимку, заюзать динамический скрипт или работать с локальной коллекцией. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 19:47 |
|
Left Join
|
|||
---|---|---|---|
#18+
Meshel, я сомневаюсь что они будут транслироваться в sql под разные типы хранилищ (ef), для этого надо писать трансляторы или брать сторонние, и то не все поддерживают ухищренные деревья, в конце концов, код может быть не оптимизирован для конкретной базы. как например есть недобаза где разработчики даже не знают что такое паддинг и предлагают выкручиваться через ровнумбер. Зы может что то изменилось у этого уродца, и появился типа лимит на уровне ядра? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 19:55 |
|
Left Join
|
|||
---|---|---|---|
#18+
Спасибо, попробую с case, а как можно коллекции использовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 19:58 |
|
Left Join
|
|||
---|---|---|---|
#18+
Хм, а если не поддерживаются, то как же можно выкрутиться ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 19:59 |
|
Left Join
|
|||
---|---|---|---|
#18+
Где-то в степиMeshel, я сомневаюсь что они будут транслироваться в sql под разные типы хранилищ (ef), для этого надо писать трансляторы или брать сторонние, и то не все поддерживают ухищренные деревья, в конце концов, код может быть не оптимизирован для конкретной базы. как например есть недобаза где разработчики даже не знают что такое паддинг и предлагают выкручиваться через ровнумбер. Зы может что то изменилось у этого уродца, и появился типа лимит на уровне ядра? Oracle? В 12 обещают что вы описываете и default seq.nextval до кучи. На самом деле на фоне ее возможностей это просто мелкая шалость. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 20:08 |
|
Left Join
|
|||
---|---|---|---|
#18+
Meshel, изменить выходную структуру, у вас она в любом разе в анонимном типе ляжет на выходе, попробуйте получать в декларированном типе, или получать ее в более ожидаемом ( общепринятом виде) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 20:09 |
|
Left Join
|
|||
---|---|---|---|
#18+
Meshel, На каких СУБД работает твоя приложуха? (Не будет работать, а на каких работает сейчас). Если хочешь оптимально - пили по хранимке на каждую СУБД и все. Если размерность N про которую ты в топике пишешь фиксирована делай VIEW/MATVIEW. Тебе все варианты предложили уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 20:15 |
|
Left Join
|
|||
---|---|---|---|
#18+
Lord BritishЕсли хочешь оптимально - пили по хранимке на каждую СУБД и все. +1, самый адекватный способ (ну или строковый запрос) Meshelкак же можно выкрутиться Ты каким местом читаешь топик. Или по-диогонали чисто? Lord BritishТебе все варианты предложили уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 20:33 |
|
Left Join
|
|||
---|---|---|---|
#18+
Где-то в степиизменить выходную структуру, у вас она в любом разе в анонимном типе ляжет на выходе Не обязательно: 13799062 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 20:37 |
|
Left Join
|
|||
---|---|---|---|
#18+
Входная последовательность не фиксирована. Если использовать коллекции... Вот список id-шников, полученный из запроса: Код: c# 1.
, где Код: c# 1. 2. 3.
Далее самое противное и неизвестное. Есть несколько таблиц, которые нужно связать и отправить левым соединением на qListId. Я выполнил запрос для этих таблиц, получил Код: c# 1.
,где Код: c# 1. 2. 3. 4.
Конечно это делать очень нежелательно, т.к. данных тьма получается. И последним запросом соединяю Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 21:06 |
|
Left Join
|
|||
---|---|---|---|
#18+
Meshel, т.к. БД разные могуь использоваться. Entity SQL (онанизм) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 21:29 |
|
Left Join
|
|||
---|---|---|---|
#18+
Генеришь текст запроса в коде и вперед. Если интересно генерируемый SQL Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 21:33 |
|
Left Join
|
|||
---|---|---|---|
#18+
мне кажется, тут цена то вопроса применить универсальный запрос под все типы баз, а нужный формат с генерировать на клиенте, тысячная доли секунды, select a.name,b.val from a inner join b on (a.id=b.id) order by a.id,b.val я даже бы order by перенес на клиенте, милый пустяк а серверу полегче ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 22:24 |
|
|
start [/forum/topic.php?fid=17&fpage=28&tid=1350129]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 162ms |
0 / 0 |