Тема: Программистские головоломки. |
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
|
Gromio
Штурман
Сообщений: 702
|
M_e_p_h_i_s_t_o пишет: По той же причине, по которой не катит решение Gromio, из-за того же специального случая.
Ax tiper' ponil
pravda ne uchel esli T2 budet pusta to v nezavisimosti ot T1 rezultat budet pusto
xmm toka kak tuta ehto napisat' .... )
Select distinct A
from T1
Inner join T2
on not T1~A is null
che-nit' takoe ...
|
---------------------- |
G.R.O.M.I.O.: General Replicant Optimized for Mandatory Infiltration and Observation
|
|
|
09 Апреля 2005 16:43 |
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
|
Vodila
Поручик
Сообщений: 1245
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
Vodila пишет: Хоть меня и просили невмешиваться, но
читайте внимательнее условие задания
в условии стоит, "быстрее с тем же результатом", вот:
SELECT DISTINCT A FROM (SELECT * FROM T1 UNION SELECT * FROM T2);
|
|
|
09 Апреля 2005 21:54 |
|
|
Grossmutters_G
Поручик
Сообщений: 1882
|
another пишет: более полное условие задачи:
на вход подаётся переменная i со значением x или y;
оптимизироват` выражение
if(i==x){ i=y; } else { i=x; }
убрав все условные операторы
(i-x)?; i=y);
Правильно?
|
---------------------- |
"Было бы величайшей ошибкой думать...",-В.И.Ленин
|
|
|
09 Апреля 2005 22:35 |
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
|
Grossmutters_G
Поручик
Сообщений: 1882
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
Grossmutters_G пишет: Очень занимательно (без иронии) А теперь назовите мне случаи, когда такая оптимизация неприемлема?
да нету таких случаев, это же так задачка на воображение, так например как и эта:
if(i=5)
{
printf("i=5");
}
else if(i>5)
{
printf("i>5");
}else if(i
|
|
|
09 Апреля 2005 23:10 |
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
|
CrystalSoul
Бывший океанец
Сообщений: 9819459
|
another пишет: да нету таких случаев, это же так задачка на воображение, так например как и эта:
иф(и=5)
{
принтф("и=5");
}
елсе иф(и>5)
{
принтф("и>5");
}елсе иф(и
втыкайте после < чтоб не реплейсило
|
|
|
09 Апреля 2005 23:15 |
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
|
Grossmutters_G
Поручик
Сообщений: 1882
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
|
Grossmutters_G
Поручик
Сообщений: 1882
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
another пишет: в условии стоит, "быстрее с тем же результатом", вот:
SELECT DISTINCT A FROM (SELECT * FROM T1 UNION SELECT * FROM T2);
Ладно, объясняю. Gromio все равно уже почти докрутил. Возьмем то, что предлагалось сначала:
SELECT DISTINCT A FROM T1
Результат тот же, что и у изначального запроса с одним исключением: когда T2 пуста, то изначальный запрос выдает пустое множество. Фактически изначальный запрос выглядит так: "Дай содержание поля A из T1, если T2 не пуста и пустое множество, если T2 пуста". Тут, кстати, возникает и проблема с UNION, т. к. UNION в этом случае не дает пустое множество. Чтобы ускорить запрос, надо убрать JOIN-операцию, но учитывать, не пуста ли T2, например, так:
SELECT A FROM T1 WHERE EXISTS (SELECT * FROM T2);
|
|
|
09 Апреля 2005 23:21 |
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
|
Vodila
Поручик
Сообщений: 1245
|
M_e_p_h_i_s_t_o пишет: SELECT A FROM T1 WHERE EXISTS (SELECT * FROM T2)
Andrej u tebja Select vypolnjaetsja v ljubom sluchae,
a mozhno sdelat' tak:
IF Exists(Select top 1 * from T2)
begin
select distinct A from T1
end
|
---------------------- |
В воздухе появилось что–то окончательное и думать стало некому, нечего, нечем да и незачем. |
|
|
09 Апреля 2005 23:25 |
|
|