powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / помочь составить запрос
10 сообщений из 10, страница 1 из 1
помочь составить запрос
    #36523107
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть таблица, например..
КодБылоСталоКод_1244200Код_2123100
Надо получить таблицу для Код="Код_1"
КодПримКолКод_1Было244Код_1Стало200
...
Рейтинг: 0 / 0
помочь составить запрос
    #36523220
quxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
q1w1e1есть таблица, например..
КодБылоСталоКод_1244200Код_2123100
Надо получить таблицу для Код="Код_1"
КодПримКолКод_1Было244Код_1Стало200
так попробуй
Код: plaintext
1.
2.
3.
4.
5.
select kod,iif(mt= 0 ,'было','стало') prim,kl
from
(select kod,было kl, 0  mt from tab
union
select kod,стало kl, 1  mt from tab)x
where kod='Код_1'
...
Рейтинг: 0 / 0
помочь составить запрос
    #36523307
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему union и union all дают различные результаты?

KodBS110202304015060
...
Рейтинг: 0 / 0
помочь составить запрос
    #36523399
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1А почему union и union all дают различные результаты?
В ХЕЛП слабО посмотреть?
...
Рейтинг: 0 / 0
помочь составить запрос
    #36523557
quxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
q1w1e1А почему union и union all дают различные результаты?

KodBS110202304015060
Какой результирующий набор желаешь получить для таких данных?
...
Рейтинг: 0 / 0
помочь составить запрос
    #36523609
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1А почему union и union all дают различные результаты?

KodBS110202304015060
union без all работает как distinct на уровне двух SELECT
С уважением, Алексей
...
Рейтинг: 0 / 0
помочь составить запрос
    #36525179
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да просто хотелось понять..
SELECT b as kol FROM table1 UNION select s as kol FROM table1 (10;20;30;40;50;60)
SELECT kod as kod,b as kol FROM table1 UNION select kod as kod,s as kol FROM table1 (1,10;1,20,1,50;1,60;2,30;2,40)
Дают разное упорядочение
и с группировкой возникают вопросы..
SELECT a.* from(SELECT kod as kod,b as kol FROM table1 UNION select kod as kod,s as kol FROM table1) a WHERE kod=1
В этом случае, как мне интуитивно кажется вначале происходит объединение, а затем отбор по условию, что наверное дольше, чем отбор по условию а затем их объединение...
SELECT kod as kod,b as kol FROM table1 WHERE kod=1 UNION select kod as kod,s as kol FROM table1 WHERE kod=1..
А с union all, вообще какая то фигня...
Когда пишешь цикл, всё логически понятно, а этот чёрный ящик, не предугадаешь, что получишь, в итоге, надо создавать тестовую таблицу, чтоб посмотреть, какой запрос лучше подойдёт...:-)
...
Рейтинг: 0 / 0
помочь составить запрос
    #36525210
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Да просто хотелось понять..
SELECT b as kol FROM table1 UNION select s as kol FROM table1 (10;20;30;40;50;60)
SELECT kod as kod,b as kol FROM table1 UNION select kod as kod,s as kol FROM table1 (1,10;1,20,1,50;1,60;2,30;2,40)
Дают разное упорядочение

Упорядочения гарантируется в SELECT - SQL ТОЛЬКО за счет предиката ORDER BY
q1w1e1
и с группировкой возникают вопросы..
SELECT a.* from(SELECT kod as kod,b as kol FROM table1 UNION select kod as kod,s as kol FROM table1) a WHERE kod=1
В этом случае, как мне интуитивно кажется вначале происходит объединение, а затем отбор по условию, что наверное дольше, чем отбор по условию а затем их объединение...
SELECT kod as kod,b as kol FROM table1 WHERE kod=1 UNION select kod as kod,s as kol FROM table1 WHERE kod=1..

Зачем сначала объединять все, а потом из этого всего выбирать часть. Включите WHERE в каждый SELECT.
q1w1e1
А с union all, вообще какая то фигня...
Когда пишешь цикл, всё логически понятно, а этот чёрный ящик, не предугадаешь, что получишь, в итоге, надо создавать тестовую таблицу, чтоб посмотреть, какой запрос лучше подойдёт...:-)

Нет в UNION ALL никакой "фигни". Я же вам уже объяснил разницу! Но можно и еще раз:
С ALL объединяет в результирующий набор все строки. Это относится и к дублирующимся строкам. Если обратное не указано, дубликаты строк удаляются. Это означает, в частности, что без ALL запрос будет выполнятся значительно дольше, чем без ALL - не надо искать дубликаты записей.
С уважением, Алексей
...
Рейтинг: 0 / 0
помочь составить запрос
    #36525244
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо...
...
Рейтинг: 0 / 0
помочь составить запрос
    #36525322
quxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
q1w1e1Да просто хотелось понять..

попробую ответить

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE CURSOR cr(r i)
INSERT INTO cr values( 2 )
INSERT INTO cr values( 1 )
INSERT INTO cr values( 100 )
INSERT INTO cr values( 10 )
INSERT INTO cr values( 5 )
INSERT INTO cr values( 8 )
INSERT INTO cr values( 5 )

Код: plaintext
SELECT * FROM cr UNION select * FROM cr
Код: plaintext
SELECT * FROM cr UNION ALL select * FROM cr
смотрим анализируем :)

По поводу группировки при UNION:
в этом случае происходит отсев дубликатов в полученном наборе и неявная сортировка-как следствие эта операция более затратная,применять её без надобности не стоит.
UNION ALL-выведет всё без упорядочивания из таблиц охваченным этим оператором.
Что применять зависит от конкретной задачи и метода её решения.
И никаких черных ящиков :)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / помочь составить запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]