Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Вниз

SQL: Декартово произведение с произвольным множеством   Найти похожие ветки 

 
Kostafey ©   (2009-10-17 00:11) [40]

> [38] SELECT ©   (16.10.09 23:58)
> не ну ты будь готов к потоку уточняющих вопросов )

Это всегда пожалуйста, конечно. :)


 
SELECT ©   (2009-10-17 00:12) [41]

всё просто:
строишь декартово произведение всех показателей и подразделений (надеюсь, что они в справочниках),
потом это джойнишь слева собственно таблицей, где "Каждая запись представляет из себя:"


 
Kostafey ©   (2009-10-17 00:22) [42]

> строишь декартово произведение всех показателей и подразделений
> (надеюсь, что они в справочниках),

Убедитесь, что вы сидете устойчиво: сейчас
велика вероятность упасть со смеху.

Список подразделений - да справочник.
Справочиника показателей не существует.
Более того, сама суть этих признаков, на
основе которых формируются показатели
зашиты в разные поля разных типов той же
самой таблицы из которой вычленяется
значение показателя для i-го типа.

Да, верно, БД даже не в 1-й нормальной форме.
Струкура БД снизошла на грешную землю с
Небес, там десятки тысяч записей и менять
ее никто не собирается.


 
SELECT ©   (2009-10-17 00:26) [43]


> Kostafey ©   (17.10.09 00:22) [42]

тогда попробуй вычленить запросом показатели - это и будет виртуальный справочник.

ЗЫ

> Более того, сама суть этих признаков, наоснове которых формируются
> показатели зашиты в разные поля разных типов той же самой
> таблицы из которой вычленяется значение показателя для i-
> го типа.


это называется абзац. т.е. приплыли )))


 
SELECT ©   (2009-10-17 00:29) [44]

"бардак систематизации не поддается" (с)


 
Kostafey ©   (2009-10-17 00:30) [45]

> тогда попробуй вычленить запросом показатели - это и будет
> виртуальный справочник.

А смысл? Его все равно нужно будет делать
left join, при том что для каждой записи
подразделения должно быть декартово произведение
с множеством показателей.
Можно с таким же успехом просто перечислить
их 1,2,3... как и было сделано выше.


 
Kostafey ©   (2009-10-17 00:31) [46]

> "бардак систематизации не поддается" (с)

Мне уже не первый раз приходится это читать
на дельфимастере в здрес тех задач, с которыми
приходится иметь дело. :))


 
SELECT ©   (2009-10-17 00:40) [47]


> Kostafey ©   (17.10.09 00:30) [45]
> А смысл? Его все равно нужно будет
> делать left join, при том что для каждой записи подразделения
> должно быть декартово произведение с множеством показателей.

не left, а декартово.
а вообще я что-то перестал понимать - то надо, то не надо...
вот же схема:
SELECT * FROM <подразделения>, <показатели>
LEFT JOIN <таблица, где "Каждая запись представляет из себя:">

непонятно, в чем успех "просто перечислить"? кого перечислить? откуда узнали, сколько перечислить?


 
Kostafey ©   (2009-10-17 00:53) [48]

> не left, а декартово.
> а вообще я что-то перестал понимать - то надо, то не надо...
> вот же схема:
> SELECT * FROM <подразделения>, <показатели>
> LEFT JOIN <таблица, где "Каждая запись представляет из себя:">

Надо, всегда надо :) Я просто то же самое в другом виде написал:

SELECT * FROM <подразделения>
LEFT JOIN <показатели>
LEFT JOIN <таблица>, где "Каждая запись представляет из себя:


где LEFT JOIN <показатели>:
left join (SELECT 1 AS ID_TYPE_INDEX UNION SELECT 2 UNION SELECT 3
          UNION SELECT 4 UNION SELECT 5 UNION SELECT 6) typeIndex on 1=1



> непонятно, в чем успех "просто перечислить"?

Я ж говорю справичника показателей нет, а их полный
перечень в любом случае должен присутствовать.

> кого перечислить?

Все показатели.

> откуда узнали, сколько перечислить?

Их перечень задан.


 
SELECT ©   (2009-10-17 01:00) [49]

последние вопросы - зачем LEFT JOIN <показатели>?
и кем, когда и в какой форме "Их перечень задан"?


 
Kostafey ©   (2009-10-17 01:02) [50]

> и кем, когда и в какой форме "Их перечень задан"?

ТЗ, вестимо ;)
Я уже писал:
> -номер показателя (их 6, вот их


 
sniknik ©   (2009-10-17 12:42) [51]

> Т.е. это относится к обсуждению различий между
нет, это относится к лишним таблицам в оригинальном запросе, с чего началось, читай сначала, и повнимательнее.


 
Kostafey ©   (2009-10-17 14:16) [52]

> [51] sniknik ©   (17.10.09 12:42)

В смысле использования временных таблиц?


 
sniknik ©   (2009-10-17 14:52) [53]

в смысле запроса который я исправил, и объяснил почему...
Григорьев Антон ©   (16.10.09 19:43) [15]
а вот почему ты это объяснение пытаешься применить к чему угодно но только не этому, загадка...


 
Kostafey ©   (2009-10-17 15:12) [54]

> [53] sniknik ©   (17.10.09 14:52)

Уф, ура, наконец-то понял. А то уж боялся так и останусь неучем :))
Спасибо!

Ну дела, то ли у меня книжки не те, то ли я их читать не умею...
Но никак не могу найти как реализовать выбор соответствующего
значения в присоединяемом исходя из значения во внешенм запросе.

Схематично:
select
 t.Field1,
 s.arbitrarySet,
 q.value
from Table1 AS t, (SELECT 1 AS arbitrarySet UNION SELECT 2 UNION SELECT 3) AS s
left join (
   select
       CASE someVariable
           WHEN 1 THEN "a"
           WHEN 2 THEN "b"
           WHEN 3 THEN "c"
           ELSE "d"
       END as value
) q on q.someVariable = s.arbitrarySet


Это, конечно не работает...
Конечно, на месте "a", "b", "c" будут свои запросы.


 
Kostafey ©   (2009-10-17 16:25) [55]

> [54] Kostafey ©   (17.10.09 15:12)

Сам про себя: а нафига я тут вообще left join приплел? :)


 
SP   (2009-10-17 16:35) [56]


> Необходимо сформулировать запрос, чтобы получить декартово
> прооизведение
> с произволным множеством, например 1,2,3, т.е.


Создай таблицу с этим самым произвольным множеством.
А потом
select Table1.Field1, Table2. from Table1.arbitrarySet from Table1,Table2

Тем более что это самое "Произвольное" множество - как я понимаю не совсем произвольное и чем-то должно определяться... Вот и в данном случае будет определяться содержимым Table2
Да и не мешало бы знать цели такой задачи, тогда возможно бы и другое более подходящее решение нашлось бы...


 
Kostafey ©   (2009-10-17 17:05) [57]

> from Table1.arbitrarySet from Table1,Table2

Это что значит?


> Да и не мешало бы знать цели такой задачи, тогда возможно
> бы и другое более подходящее решение нашлось бы...

см. > [39] Kostafey ©   (17.10.09 00:08)


 
SP   (2009-10-17 17:19) [58]

Ой, блин... Это издержки копипаста...
Имелось ввиду:

select Table1.Field1, Table2.arbitrarySet from Table1,Table2



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.009 c
15-1255252664
Kerk
2009-10-11 13:17
2009.12.13
Украсть ящик водки, продать его, а полученные деньги пропить.


15-1255638608
Юрий
2009-10-16 00:30
2009.12.13
С днем рождения ! 16 октября 2009 пятница


15-1255288842
Кто б сомневался
2009-10-11 23:20
2009.12.13
Что за игра кёрнинг - нигде не могу найти инфу


2-1256711630
petvv
2009-10-28 09:33
2009.12.13
Не пойму с запросом


2-1256117947
xyz
2009-10-21 13:39
2009.12.13
перебор выделенных строк в DBGridEh





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский