![]() |
|
Модераторы: Akina |
![]()
|
|
| 4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
нужно в зависимости от результата запроса в одном столбце вывести либо столбец из одной таблицы,либо столбец из другой.как это можно реализовать?
-------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
| SergKO |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 14.3.2005 Репутация: 17 Всего: 20 |
используйте CASE
|
|||
|
||||
| 4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
уже пробовал,но опыта пока для этого не хватает...
-------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
| SergKO |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 14.3.2005 Репутация: 17 Всего: 20 |
Приведите запрос, и покажите из каких полей надо выбирать.
|
|||
|
||||
| 4ybaka |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
база NorthWind у меня запрос получился такой:
но в нем вместо E.LastName и C.ContactName нужно вывести один столбец ‘Person’,значение в кот либо из E.LastName либо из C.ContactName.и еще добавить столбец ‘Type’,кот также необходимо заполнить как указано выше. -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
||||
|
|||||
| SergKO |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 14.3.2005 Репутация: 17 Всего: 20 |
Очень похоже на упражнение на sql-ex. Давайте так, полностью Вы запрос напишите сами, а пример использования CASE вот
|
|||
|
||||
| 4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
на сколько я знаю,при таком соединении таблиц(скалярное произведение вроде) у нас в каждой строчке будет и E.LastName и C.ContactName,те ни один из них не будет is null.значит всегда будет выводиться пустая строка...подскажите хотя бы в какую сторону копать.
-------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
| Servena |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 24.7.2007 Где: Днепропетровск Репутация: 10 Всего: 14 |
Использую Northwind, попробуй так:
И не использовать JOIN - это не значит использовать старый синтаксис соединения, я думаю. В скором будущем сервера БД не будут его поддерживать, а будут использовать ANSI стандарт. Добавлено через 23 секунды Использую Northwind, попробуй так:
И не использовать JOIN - это не значит использовать старый синтаксис соединения, я думаю. В скором будущем сервера БД не будут его поддерживать, а будут использовать ANSI стандарт. Добавлено через 3 минуты и 8 секунд Два раза одно и тоже - это глюкануло, не отправлялось долго и т.д. |
||||
|
|||||
| 4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
Servena, спасибо за помощь,но я виноват,надо было сразу все ограничения дать...
вообщем тема задания была такая:
так что union здесь использовать нельзя.я тоже хотел -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
| Servena |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 24.7.2007 Где: Днепропетровск Репутация: 10 Всего: 14 |
Ну так а в предыдущих примерах использовалось тоже соединение, но только оно написано в станом синтаксисе(без слова джоин). Какая разница?! Но я еще подумаю над этим. А временные таблицы использовать можно?
|
|||
|
||||
| Servena |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 24.7.2007 Где: Днепропетровск Репутация: 10 Всего: 14 |
Так, после разговора с "экспертами" можно с уверенность сказать, что использовать данные с двух разных таблиц, не использую соединения
их - невозможно. Теперь нужно разобраться с условием задачи: Явное соединение таблиц, самосоединения, ... - что это значит? А что есть не явное соединение? Или не так, используя синтаксис типа: from Customers C,Employees E - можно ли его назвать неявным соединением? Я думаю что нет, поскольку это обычный синтаксис MS SQL до 6.5 версии, другого тогда не было, т.е. это обычная старая (явная) запись объединения(методом пересечения, в стандарте ANSI это называется CROSS JOIN). Таким образом прихожу к заключению - нужно уточнить условие задачи, т.е. расшифровать, что значит "неявное" соединение, потому что без соединения тут не обойтись. |
|||
|
||||
| 4ybaka |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
точно не знаю, есть ли вообще такое...)в задании сказано:
их соединять можно,даже нужно.просто ограничения по поводу join относятся к outer join и другим доп-ым возможностям. нет -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
||||
|
|||||
| Servena |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 24.7.2007 Где: Днепропетровск Репутация: 10 Всего: 14 |
Итак, подведем итог:
1. Cоединение можно использовать, но не внешнее (OUTER LEFT JOIN, OUTER LEFT JOIN). 2. Пересечение таблиц (CROSS JOIN) тоже нельзя использовать. 3. Объединение (UNION) - нельзя. 4. Внутренее соединение (INNER JOIN) можно. Правильно? И еще, расшифруй тогда что такое "Явное соединение таблиц". |
|||
|
||||
| 4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
да,все правильно
вот
по поводу 1 и 2 пункта - эти соединения встречаются немного позже... -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
| Servena |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 24.7.2007 Где: Днепропетровск Репутация: 10 Всего: 14 |
Еще раз повторюсь:
Мне просто интересно, как можно назвать старый синтаксис "неявным" соединением, а стандартный синтаксис - явным?! И где это изучают перекрестное соединения, начиная с устаревшего синтаксиса, а потом уже учат стандартный? В любой книге приводится сначала стандартный синтаксис а потом в качестве обзора - устаревший, чтобы люди не конфузились, если вдруг его повстречают. Ну да ладно, хвала нашим преподавателям! Не знаю как это сделать с помощью перекрестного соединения - буду с нетерпением ждать, может у кого получится. |
||||
|
|||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |