Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Разный where в зависомости от заполненности таблицы / 13 сообщений из 13, страница 1 из 1
30.05.2005, 11:38
    #33090263
Simple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
Есть табличка Table1 и Table2
В Table1 ID2 - Внешний ключ таблица 2
Table1 (ID1,ID2)
Table2(ID2)

Select t1.*
from Table1 t1
,table2 t2
where t1.ID2=t2.ID2
возвращает соотв. строки в случае, если в table2 есть данные.
Надо если там нет данных, возвращать все строки:
Select t1.*
from Table1 t1

Можно ли сделать это в одном селекте?

Можно, конечно, проверять, есть ли в Table 2 строки, если есть брать 1 SQL, если нет - другой. Но это не красиво.
Желательно проделать это без exec.
...
Рейтинг: 0 / 0
30.05.2005, 11:47
    #33090290
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
SimpleЕсть табличка Table1 и Table2
В Table1 ID2 - Внешний ключ таблица 2
Table1 (ID1,ID2)
Table2(ID2)

Select t1.*
from Table1 t1
,table2 t2
where t1.ID2=t2.ID2
возвращает соотв. строки в случае, если в table2 есть данные.
Надо если там нет данных, возвращать все строки:
Select t1.*
from Table1 t1

Можно ли сделать это в одном селекте?

Можно, конечно, проверять, есть ли в Table 2 строки, если есть брать 1 SQL, если нет - другой. Но это не красиво.
Желательно проделать это без exec.
Может быть так сильно не заморачиваться и воспользоваться внешним соединением ? Типа того:
Код: plaintext
1.
2.
Select  t1.*, t2.*
from Table1 t1 
  left join Table2 t2 on t1.ID2 = t2.ID2

P.S. А вообще то очень рекомендую прочитать висящий топик сверху в данном форуме, при надобности сходить в FAQ и почитать, почему у Sybase 3 разных СУБД и в дальнейшем как минимум указывать, какая СУБД с какой версией используется, так как все штатные телепаты уже давно ушли в отпуск. Так же неплохо бы почитать документацию по основам SQL.
...
Рейтинг: 0 / 0
30.05.2005, 11:56
    #33090316
Litus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
Либо так:
Select t1.*, t2.*
from Table1 t1
where t1.ID2 *= t2.ID2
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
30.05.2005, 12:15
    #33090385
Simple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
ASEnterprise
...
Рейтинг: 0 / 0
30.05.2005, 12:32
    #33090439
Simple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
Это не то.

Create Table #Table1(
ID1 numeric
,ID2 numeric
)
Create Table #Table2(
ID2 numeric

Код

insert #Table1 (ID1,ID2) values (1,1)
insert #Table1 (ID1,ID2) values (2,1)
insert #Table1 (ID1,ID2) values (3,2)
insert #Table1 (ID1,ID2) values (4,2)

insert #Table2 (ID2) values(1)

select t1.*
from #Table1 t1
,#Table2 t2
where t1.ID2*=t2.ID2

возвращает 4 строки, а надо, чтобы возвращал 2.
left Join всегда будет выводить все строки со стоны звезды.
...
Рейтинг: 0 / 0
30.05.2005, 13:09
    #33090540
serg08
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
А вот так??

select * from Table1 t1
where exists(select t1.id2 from Table2 t2 where t1.id2=t2.id2)
...
Рейтинг: 0 / 0
30.05.2005, 13:16
    #33090557
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
Не сразу понятно, что хотели. Вам нужен этот вариант (если конечно ASE прожует):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// Вернуть записи, которые есть в Table2
SELECT t1.*
FROM Table1 t1
  INNER JOIN Table2 t2 ON t2.ID2 = t1.ID2
UNION ALL
// Или вернуть все записи, если в Table2 ничего нет
SELECT t1.*
FROM Table1 t1
WHERE NOT EXISTS(
  SELECT *
  FROM Table2 t2
  WHERE t2.ID2 = t1.ID2 )
...
Рейтинг: 0 / 0
30.05.2005, 13:21
    #33090569
Simple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
Serg08
Это тоже не то, так как

insert #Table1 (ID1,ID2) values (1,1)
insert #Table1 (ID1,ID2) values (2,1)
insert #Table1 (ID1,ID2) values (3,2)
insert #Table1 (ID1,ID2) values (4,2)

--insert #Table2 (ID2) values(1)

select *
from #Table1 t1
where exists(select t1.id2
from #Table2 t2
where t1.id2=t2.id2)
ничего не возвращает, а должен веруть 4 строки
...
Рейтинг: 0 / 0
30.05.2005, 13:32
    #33090595
Simple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
ASCRUS, это тоже не то.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
insert #Table1 (ID1,ID2) values ( 1 , 1 )
insert #Table1 (ID1,ID2) values ( 2 , 1 )
insert #Table1 (ID1,ID2) values ( 3 , 2 )
insert #Table1 (ID1,ID2) values ( 4 , 2 )

insert #Table2 (ID2) values( 1 )


// Вернуть записи, которые есть в Table2
SELECT t1.*
FROM #Table1 t1
  INNER JOIN #Table2 t2 ON t2.ID2 = t1.ID2
UNION ALL
// Или вернуть все записи, если в Table2 ничего нет
SELECT t1.*
FROM #Table1 t1
WHERE NOT EXISTS(
  SELECT *
  FROM #Table2 t2
  WHERE t2.ID2 = t1.ID2 )
Возвращает 4 строчки, а должен вернуть 2
...
Рейтинг: 0 / 0
30.05.2005, 13:37
    #33090605
Simple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
Всем спасибо, вот так работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT t1.*
FROM #Table1 t1
  INNER JOIN #Table2 t2 ON t2.ID2 = t1.ID2
UNION ALL
// Или вернуть все записи, если в Table2 ничего нет
SELECT t1.*
FROM #Table1 t1
WHERE NOT EXISTS(
  SELECT *
  FROM #Table2 t2
 )
...
Рейтинг: 0 / 0
30.05.2005, 13:42
    #33090619
Simple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
Но это практически то же самое, как если написать
if (select count(*) from table2)>0
begin

end
else
begin

end
...
Рейтинг: 0 / 0
30.05.2005, 15:45
    #33090971
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
авторASCRUS, это тоже не то.
Нужно лучше описывать задачу. Гадать на кофейной гуще как то не интересно. Плюс еще желательно пользоваться тегами форматирования скриптов (SRC, CSV), чтобы присутствующие не ломали глаза :)

авторНо это практически то же самое, как если написать
if (select count(*) from table2)>0
begin

end
else
begin

end

Это не то же самое, так как Вы привели батч (скрипт), а я привел запрос, который можно выполнить откуда угодно - хоть с клиентского приложения, хоть в представлении. Плюс уже при построении (для ASE я так понимаю компиляции) моего запроса, оптимизатор четко будет знать, какую часть только необходимо выполнить (хотя для ASE опять же желательно на всякий пожарный это точно проверить, так как все мои утверждентия истины только для ASA).
...
Рейтинг: 0 / 0
30.05.2005, 16:37
    #33091113
Simple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный where в зависомости от заполненности таблицы
ASCRUS
Нужно лучше описывать задачу

Постараюсь, большое спасибо за помощь!
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Разный where в зависомости от заполненности таблицы / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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