|
|
|
Многие-к-многим - можно ли группировать?
|
|||
|---|---|---|---|
|
#18+
Всем привет. Возможно, простой вопрос, но сообразить никак не могу. Дано. Таблица объектов А (ida, namea). Таблица свойств В (idb, nameb). Таблица связей С (idc, idxa, idxb, probc), реализуюшая отношение многие-к-многим (+ вероятность каждого отношения). Требуется. Выполнить запрос вида "Получить все А, для которых (Б = Б1 или Б=Б2 ...) и (Б = Б3 или Б = Б4 ...)" Решается на данный момент пересечением вида SELECT ida FROM C INNER JOIN A ON idxa = ida INNER JOIN B ON idxb = idb WHERE (nameb = B1 OR nameb = B2) INTERSECT SELECT ida FROM C INNER JOIN A ON idxa = ida INNER JOIN B ON idxb = idb WHERE (nameb = B3 OR nameb = B3) Но есть две проблемы. Во-первых, использование INTERSECT представляется не самым быстрым вариантом. Можно ли как-то иначе? Во-вторых, допустим у нас в результате среди прочих выбран объект А123, у которого есть связь А123-Б1 с вероятностью probc = 0.1, связь А123-Б2 с вероятностью probc = 0.2 и есть связь А123-Б3 с вероятностью probc = 0.3. Требуется посчитать произведения пар вероятностей, т.е. для пары А123-Б1 и А123-Б3 (0.1 * 0.3), и пары А123-Б2 и А123-Б3 (0.2 * 0.3). В SELECT вставлять нельзя, не будет работать INTERSECT (вероятности-то разные). Сейчас это делается вторым запросом, по А, найденным запросом, приведенным выше. Но может можно как-то объединить в один запрос? Спасибо за любые советы. С уважением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2009, 18:45 |
|
||
|
Многие-к-многим - можно ли группировать?
|
|||
|---|---|---|---|
|
#18+
самое простое - замените INTERSECT на JOIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2009, 19:00 |
|
||
|
Многие-к-многим - можно ли группировать?
|
|||
|---|---|---|---|
|
#18+
Насчет вероятностей - как-то так? Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2009, 19:11 |
|
||
|
Многие-к-многим - можно ли группировать?
|
|||
|---|---|---|---|
|
#18+
Приветствую, Все работает! Поправил вероятности (это поле таблицы связей С, а не таблицы свойств В), в окончательном виде выглядит так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2009, 01:14 |
|
||
|
|

start [/forum/topic.php?fid=32&gotonew=1&tid=1543031]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 464ms |

| 0 / 0 |
