crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> When в FROM
Rosster
  опции профиля:
сообщение 18.1.2011, 21:23
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 23.11.2009
Пользователь №: 1254

Спасибо сказали: 0 раз(а)




Репутация:   0  


Можно ли в FROM записать какое-либо условие, например, если поле равно тому-то то выборка из такой таблицы,а если нет то из другой таблицы, что-то типа этого:
FROM
WHEN (id=1)
table1
ELSE
table2
при этом все колонки у обоих таблиц совпадают
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
arial
  опции профиля:
сообщение 19.1.2011, 9:14
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 39
Регистрация: 27.9.2009
Пользователь №: 1121

Спасибо сказали: 9 раз(а)




Репутация:   0  


Цитата(Rosster @ 18.1.2011, 21:23) *
при этом все колонки у обоих таблиц совпадают

Если все колонки у обеих таблиц совпадают, то имеет смысл объединить их в одну таблицу и добавить колонку с идентификатором (id=1).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 19.1.2011, 23:32
Сообщение #3


Профессионал
*****

Группа: Модератор
Сообщений: 1587
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 218 раз(а)




Репутация:   12  


ну, гипотетически можно попробовать сделать VIEW из двух таблиц. но не все базы это поддерживают.

можно также попробовать выборку с полным join'ом, что-нить типа

select (t1.field1*CheckId(t1.id)+t2.field1*CheckId(t1.id)) as field1 from table1 t1 full join table2 t2 on t1.id=t2.id where ...

(это пример, c численными значениями field1 и некоей абстракцией CheckId(), которая должна быть заменена на конструкцию проверки нужного условия и выдавать 0 или 1, в зависимости от false/true. точно это всё надо сочинять, согласно правилам SQL, я просто деталей уже не помню, слишком давно писала базы).
понятно, что для этого надо составлять очень хитрожопые условия суммирования полей (объединения, для строк) - так, чтобы одно из них занулялось по условию равенства единице этого самого id'а, а ещё как-то проверять на NULL (ибо при full join скорее всего будет множество пустых полей). да и работать будет весьма медленно.

да, кстати, через функции может сработать. юзерскую функцию можно написать, если база поддерживает такое.

а так, напрямую, средствами стандартного синтаксиса, нельзя.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MoPDoBoPoT
  опции профиля:
сообщение 20.1.2011, 22:16
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


Цитата(Iron Bug @ 19.1.2011, 23:32) *
можно также попробовать выборку с полным join'ом, что-нить типа

Мне кажется имелась ввиду выборка не одного поля, а нескольких.
Цитата(Rosster @ 18.1.2011, 21:23) *
Можно ли в FROM записать какое-либо условие, например, если поле равно тому-то то выборка из такой таблицы,а если нет то из другой таблицы

Так как сущности односхемные, то можно это сделать двумя запросами, объединёнными операцией UNION:
SELECT FIELD_1, ..., FIELD_N
FROM TABLE_1
WHERE ...
UNION ALL
SELECT FIELD_1, ..., FIELD_N
FROM TABLE_2
WHERE ...

Я в примере написал UNION ALL, так как в твоём случае из таблиц выбираются взаимоисключающие записи (по условию), что избавляет СУБД от вложенной проверки на одинаковые записи.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 21.1.2011, 7:36
Сообщение #5


Профессионал
*****

Группа: Модератор
Сообщений: 1587
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 218 раз(а)




Репутация:   12  


Цитата(MoPDoBoPoT @ 21.1.2011, 0:16) *
Мне кажется имелась ввиду выборка не одного поля, а нескольких.

ну дык, а в чём проблема написать такое выражение для скольки угодно полей?
это просто пример. реализация будет зависеть от типов данных в таблице и от того, пересекаются ли таблицы по значениям поля id.

Сообщение отредактировал Iron Bug - 21.1.2011, 7:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.8.2019, 23:13