Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка, подобие условия IF 
:(
    Опции темы
Artemon
Дата 28.5.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Есть тадблица

ID  VAL(nvarchar)
____________
1    a
2    b
3    c


Как НЕ выбрать из таблицы все данные, только в том случае, если во всей таблице есть ID равный 3.



--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
SergKO
Дата 28.5.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



Код

declare @t table (id int, val nvarchar(50));

    insert into @t
        select 1, 'a'
        union all
        select 2, 'b'
        union all
        select 3, 'c';
    
      -- Если в таблице нет ни одной записи с id = 3, то будут выбраны все записи.    
    if not exists(select * from @t where id = 3)
        select * from @t;



PM MAIL   Вверх
Artemon
Дата 28.5.2007, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



У меня немного другая ситуация:

Код

SELECT FILE_NAME FROM FILES 
LEFT JOIN UNIQUE_KEYS ON FILES.ID_FILE = UNIQUE_KEYS.ID_FILE 
LEFT JOIN ALL_UNIQUE_KEYS ON ALL_UNIQUE_KEYS.ID_ALL_UNIQUE_KEY = UNIQUE_KEYS.ID_ALL_UNIQUE_KEY
WHERE  UNIQUE_KEYS.ID_FILE is NULL OR ALL_UNIQUE_KEYS.SERIAL <> '062D1DFB-B25D'


Получается что ALL_UNIQUE_KEYS.SERIAL содержит сисок значений, в котором присутствует '062D1DFB-B25D'.
Я хочу чтобы зпрос не возвращл записей, если есть значение '062D1DFB-B25D'.




--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
SergKO
Дата 28.5.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



Можно

Код

if not exists(select * from ALL_UNIQUE_KEYS where SERIAL = '062D1DFB-B25D')
     SELECT FILE_NAME 
     FROM FILES 
          LEFT JOIN UNIQUE_KEYS ON FILES.ID_FILE = UNIQUE_KEYS.ID_FILE 
          LEFT JOIN ALL_UNIQUE_KEYS ON ALL_UNIQUE_KEYS.ID_ALL_UNIQUE_KEY = UNIQUE_KEYS.ID_ALL_UNIQUE_KEY
     WHERE  UNIQUE_KEYS.ID_FILE is NULL 


или

Код

     SELECT FILE_NAME 
     FROM FILES 
          LEFT JOIN UNIQUE_KEYS ON FILES.ID_FILE = UNIQUE_KEYS.ID_FILE 
          LEFT JOIN ALL_UNIQUE_KEYS ON ALL_UNIQUE_KEYS.ID_ALL_UNIQUE_KEY = UNIQUE_KEYS.ID_ALL_UNIQUE_KEY
     WHERE  UNIQUE_KEYS.ID_FILE is NULL and not exists(select * from ALL_UNIQUE_KEYS where SERIAL = '062D1DFB-B25D')


Первый вариант предпочтительнее.

В результате выбираются все записи из таблицы FILES, для которых отсутствуют записи в подчиненной таблице UNIQUE_KEYS. Если-же в таблице ALL_UNIQUE_KEYS есть хотя бы одна запись с SERIAL = '062D1DFB-B25D', то набор вернется пустой (для второго случая) или выборка не будет производиться (для первого случая).



Это сообщение отредактировал(а) SergKO - 28.5.2007, 11:39
PM MAIL   Вверх
Artemon
Дата 28.5.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



А если я хочу чтобы exists проверял набор, который возвращает последний LEFT JOIN?


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
SergKO
Дата 28.5.2007, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



1. Для случая 
Цитата(SergKO @  28.5.2007,  11:31 Найти цитируемый пост)
В результате выбираются все записи из таблицы FILES, для которых отсутствуют записи в подчиненной таблице UNIQUE_KEYS. Если-же в таблице ALL_UNIQUE_KEYS есть хотя бы одна запись с SERIAL = '062D1DFB-B25D', то набор вернется пустой (для второго случая) или выборка не будет производиться (для первого случая).

LEFT JOIN ALL_UNIQUE_KEYS ON ALL_UNIQUE_KEYS.ID_ALL_UNIQUE_KEY = UNIQUE_KEYS.ID_ALL_UNIQUE_KEY уже лишний. Т.е. его не следует указывать.

А для
Цитата(Artemon)
 если я хочу чтобы exists проверял набор, который возвращает последний LEFT JOIN?).

попробуйте

Код

     SELECT FILE_NAME 
     FROM FILES 
          LEFT JOIN UNIQUE_KEYS ON FILES.ID_FILE = UNIQUE_KEYS.ID_FILE 
     WHERE  UNIQUE_KEYS.ID_FILE is NULL 
     and not exists(select * from ALL_UNIQUE_KEYS t1 where t1.ID_ALL_UNIQUE_KEY = UNIQUE_KEYS.ID_ALL_UNIQUE_KEY and SERIAL = '062D1DFB-B25D')

Я сам не могу проверить.
Если я не правильно Вас понял, то напишите более подробно, что требуется получить.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.