|
|
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
Главные актеры: Таблицы t_skv_geo(geo_id,geo_date,skv_id) t_geo_plasts(geo_id,plast_id) -для развязки отношения M:M t_plast(plast_id,plast_name) - справочник Запрос SELECT geo_id FROM t_skv_geo AS T1 WHERE (geo_date=... AND skv_id=... AND (SELECT plast_id FROM t_geo_plasts AS T2 WHERE T2.geo_id=T1.geo_id) IN (..., ..., ...) ) НЕ РАБОТАЕТ!! Пишет : "Подзапрос должен возвращать одно значение". Научите как написать запрос с критерием "множ-во = множ-во". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 11:56:05 |
|
||
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
авторAND (SELECT plast_id FROM t_geo_plasts AS T2 WHERE T2.geo_id=T1.geo_id) IN (..., ..., ...) ничего не понял, но кажется ты хочешь: авторAND EXISTS ( SELECT * FROM t_geo_plasts AS T2 WHERE T2.geo_id=T1.geo_id AND plast_id IN (..., ..., ...) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 12:17:21 |
|
||
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
4321, Это не то. Мне нужна проверка на равенство множеств, т.е. чтобы множество возвращаемых значений подзапроса было РАВНО или идентично по своему составу множесту, которое я задаю (..., ..., ..., ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 12:31:53 |
|
||
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял (прошу прощения за синтаксис T-SQL): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 13:04:12 |
|
||
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
да, вместо t_geo_plasts имелся в виду t_plast ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 13:05:46 |
|
||
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
не помню как в MS, но это или при помощи EXCEPT или INTERSECT (кажется) решается, а в нашем случае ограниченного воспоминание о T-SQL достаточно. если IN() не слишком большое, добавить кроме NOT EXISTS(SELECT * WHERE ... AND p_id NOT IN()) (нет других) перечислить для каждого: EXISTS(SELECT * WHERE p_id =... ) AND EXISTS(SELECT * WHERE p_id =... ) (есть каждый) А луч-че сходить на форум по T-SQL ___ Ах, да, пофантазируйте на тему: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 13:23:59 |
|
||
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
Ну Вы меня совсем запутали ... даже не знаю как теперь быть ... T-SQL я не знаю, поэтому конструкция с FULL OUTER JOIN - для меня темный лес. Как это будет выглядеть в LEFT,INNER джойнах ? 4321 предлагает добавить следующий критерий, я правильно понял? Если множество-критерий (p1,p2,...), то сравнение множеств будет производиться так: ... AND EXISTS( SELECT * FROM t_geo_plasts WHERE T2.geo_id=T1.geo_id AND plast_id =p1 ) AND EXISTS(SELECT * FROM t_geo_plasts WHERE T2.geo_id=T1.geo_id AND plast_id =p2 ) AND EXISTS(SELECT * FROM t_geo_plasts WHERE T2.geo_id=T1.geo_id AND plast_id =... ) ТАК? Ну это же супер гемор! Особенно в случае программного формирования(что у меня и происходит). Неужели нет пути попроще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 13:40:16 |
|
||
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
Я ж сказал "пофантазируйте" (я там, кажется наборы местами попутал - надо б тогда Right и Q1.p_id IS NULL) Кажется вот так почти правильно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 13:46:15 |
|
||
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
и, есс-но SELECT ??? WHERE читать: SELECT ??? FROM t_geo_plasts WHERE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 13:54:30 |
|
||
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
продолжаем спать в фантазиях LEFT джойн ес-но по полю p_id (структура фантазий далека, как видим, от четкой конкретики конечной реализации) Не претендуя полную корректность: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 14:03:36 |
|
||
|
Возможен ли такой запрос или как работать с множествами в SQL.
|
|||
|---|---|---|---|
|
#18+
По поводу FULL OUTER JOIN - это (по набору) просто UNION (без ALL) от RIGHT и LEFT. (должен только чуть резвее считаться чем такая юнион-конструкция). Он тут поможет, если запихать набор In(...,....) в некий набор, например: SELECT ... UNION SELECT ... .... UNION SELECT ... А уж с ним вязаться FULL OUTER JOIN - ом. Или, если выбросить первый запрос в том, что я налепил чуть выше, и сделать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 14:17:04 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1535&tid=1670811]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 346ms |

| 0 / 0 |
