![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Rosster |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 33 Регистрация: 23.11.2009 Пользователь №: 1254 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Можно ли в FROM записать какое-либо условие, например, если поле равно тому-то то выборка из такой таблицы,а если нет то из другой таблицы, что-то типа этого:
FROM WHEN (id=1) table1 ELSE table2 при этом все колонки у обоих таблиц совпадают |
|
|
arial |
![]()
Сообщение
#2
|
![]() Студент ![]() Группа: Участник Сообщений: 39 Регистрация: 27.9.2009 Пользователь №: 1121 Спасибо сказали: 9 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Iron Bug |
![]()
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
ну, гипотетически можно попробовать сделать 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 |
![]()
Сообщение
#4
|
Участник ![]() ![]() Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: ![]() ![]() ![]() |
можно также попробовать выборку с полным join'ом, что-нить типа Мне кажется имелась ввиду выборка не одного поля, а нескольких. Можно ли в FROM записать какое-либо условие, например, если поле равно тому-то то выборка из такой таблицы,а если нет то из другой таблицы Так как сущности односхемные, то можно это сделать двумя запросами, объединёнными операцией UNION:
Я в примере написал UNION ALL, так как в твоём случае из таблиц выбираются взаимоисключающие записи (по условию), что избавляет СУБД от вложенной проверки на одинаковые записи. |
|
|
Iron Bug |
![]()
Сообщение
#5
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
Мне кажется имелась ввиду выборка не одного поля, а нескольких. ну дык, а в чём проблема написать такое выражение для скольки угодно полей? это просто пример. реализация будет зависеть от типов данных в таблице и от того, пересекаются ли таблицы по значениям поля id. Сообщение отредактировал Iron Bug - 21.1.2011, 7:37 |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 11.3.2025, 11:40 |