crossplatform.ru

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


  Ответ в When в FROM
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Iron Bug Дата 21.1.2011, 7:36
 
Цитата(MoPDoBoPoT @ 21.1.2011, 0:16) *
Мне кажется имелась ввиду выборка не одного поля, а нескольких.

ну дык, а в чём проблема написать такое выражение для скольки угодно полей?
это просто пример. реализация будет зависеть от типов данных в таблице и от того, пересекаются ли таблицы по значениям поля id.
MoPDoBoPoT Дата 20.1.2011, 22:16
 
Цитата(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 Дата 19.1.2011, 23:32
  ну, гипотетически можно попробовать сделать 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 скорее всего будет множество пустых полей). да и работать будет весьма медленно.

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

а так, напрямую, средствами стандартного синтаксиса, нельзя.
arial Дата 19.1.2011, 9:14
 
Цитата(Rosster @ 18.1.2011, 21:23) *
при этом все колонки у обоих таблиц совпадают

Если все колонки у обеих таблиц совпадают, то имеет смысл объединить их в одну таблицу и добавить колонку с идентификатором (id=1).
Rosster Дата 18.1.2011, 21:23
  Можно ли в FROM записать какое-либо условие, например, если поле равно тому-то то выборка из такой таблицы,а если нет то из другой таблицы, что-то типа этого:
FROM
WHEN (id=1)
table1
ELSE
table2
при этом все колонки у обоих таблиц совпадают
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 12:43