Форум: "Прочее";
Текущий архив: 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.56 MB
Время: 0.01 c