![]() |
#1 |
Участник
|
Помогите с запросом
Подскажите, как решить следующую задачу:
Имеем две таблицы Таблица1 и Таблица2. Таблица 1 содержит перечень товаров. Таблица 2, содержит некий набор характеристик каждого товара: КодТовара, Характеристика. Связь 1:n. Необходимо выбрать все товары, имеющих заданный набор признаков. Попробовал решить задачу с помощью Exists Join. Select Table1 Exists Join Table2 Where table2.itemId == table1.itemId && table2.feature == 1 Exists Join Table2 Where table2.itemId == table1.itemId && table2.feature == 2 Exists Join Table2 Where table2.itemId == table1.itemId && table2.feature == 3 И т д. Это отлично работает пока количество условий меньше 26. Если же условий 26 и больше система сообщает об ошибке. Если посмотреть в профайлер, то можно увидеть, что для каждой присоединенной таблицы, система присваивает имя a, b, c, d и т д. После символа «z» следующей переменной присваивается имя «[» на что SQL естественно ругается. Можно ли как-нибудь обойти эту ситуацию? Можно ли по-другому сформулировать запрос, чтобы уменьшить количество объединений? Axapta 3.0.SP3 |
|
![]() |
#2 |
Участник
|
почему бы не использовать 1 exists join? и все условия описать в where
|
|
![]() |
#3 |
Программатор
|
О Боже...
![]() X++: While select table1 where table1.itemid == table2.itemid && (table2.feature == tmp1 || table2.feature == tmp2 ...) |
|
![]() |
#4 |
Участник
|
Цитата:
Потому что нужно выбрать записи, которые содержат все критерии, а не хотя бы один. Вот если бы в вашем примере вместо ИЛИ можно было использовать И, тогда это было бы похоже на то что нужно. |
|
![]() |
#5 |
Участник
|
|
|
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
Участник
|
|
|
![]() |
#10 |
Программатор
|
X++: While select table1 where table1.itemid == table2.itemid && table2.feature == A && table2.feature == B && table2.feature == C { } |
|
![]() |
#11 |
Участник
|
|
|
![]() |
#12 |
Участник
|
Цитата:
{ select table2 where table2.itemid == table1.itemid && table2.feature == A && table2.feature ==B && table2.feature ==C if (table2) в контйнер или куда нибудь } |
|
![]() |
#13 |
Участник
|
А у вас в Таблице 2 пары ItemId, Feature уникальны?
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#14 |
Axapta
|
|
|
![]() |
#15 |
Участник
|
Цитата:
group by ItemId join TableId from table2 where (table2.ItemId == table1.ItemId) && ((table2.Feature == "A") || (table2.Feature == "B")) |
|
![]() |
#16 |
Участник
|
|
|
![]() |
#17 |
Программатор
|
Я join забыл
![]() |
|
![]() |
#18 |
Участник
|
Цитата:
select ItemId from table1 group by ItemId join count(TableId) from table2 where (table2.ItemId == table1.ItemId) && ((table2.Feature == "A") || (table2.Feature == "B") || (table2.Feature == "C")) && count(tableId) =3 3 - количество условий Последний раз редактировалось leshy; 29.05.2007 в 12:14. |
|
![]() |
#19 |
Программатор
|
Это чо папало...Так низя...
|
|
![]() |
#20 |
Участник
|
|
|
Теги |
ax3.0 |
|
![]() |
||||
Тема | Ответов | |||
Помогите с запросом | 8 | |||
Помогите с запросом | 4 | |||
помогите с запросом | 4 | |||
Помогите с запросом.. | 2 | |||
Помогите с SQL запросом | 8 |
|