crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 2:56