powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Разный where в зависомости от заполненности таблицы
13 сообщений из 13, страница 1 из 1
Разный where в зависомости от заполненности таблицы
    #33090263
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.
...
Рейтинг: 0 / 0
Разный where в зависомости от заполненности таблицы
    #33090290
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Разный where в зависомости от заполненности таблицы
    #33090316
Litus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Либо так:
Select t1.*, t2.*
from Table1 t1
where t1.ID2 *= t2.ID2
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Разный where в зависомости от заполненности таблицы
    #33090385
Simple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASEnterprise
...
Рейтинг: 0 / 0
Разный where в зависомости от заполненности таблицы
    #33090439
Simple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это не то.

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
Разный where в зависомости от заполненности таблицы
    #33090540
serg08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот так??

select * from Table1 t1
where exists(select t1.id2 from Table2 t2 where t1.id2=t2.id2)
...
Рейтинг: 0 / 0
Разный where в зависомости от заполненности таблицы
    #33090557
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не сразу понятно, что хотели. Вам нужен этот вариант (если конечно 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
Разный where в зависомости от заполненности таблицы
    #33090569
Simple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Разный where в зависомости от заполненности таблицы
    #33090595
Simple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Разный where в зависомости от заполненности таблицы
    #33090605
Simple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, вот так работает:
Код: 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
Разный where в зависомости от заполненности таблицы
    #33090619
Simple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но это практически то же самое, как если написать
if (select count(*) from table2)>0
begin

end
else
begin

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

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

end
else
begin

end

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

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


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