Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Проверка существования

Внешние соединения | Сравнение левосторонних и правосторонних внешних соединений | Трехсторонние внешние соединения | Рекурсивные внешние соединения | Перекрестные соединения | Естественные соединения | Что такое условная логика? | Выражение case | Простые выражения case | Gt; FROM account |


Читайте также:
  1. VIII. Проверка долговечности подшипников
  2. X. Проверка прочности шпоночных соединений
  3. XX. Пузырь существования
  4. XXVIII. Пузырь существования
  5. XXXVI Проверка на опыте
  6. А) Проверка прочности обрешетки по нормальным напряжениям при косом изгибе (по I группе предельных состояний).
  7. а) Проверка прочности стропилл по нормальным напряжениям при изгибе (по I группе предельных состояний).

 

В некоторых случаях требуется установить существование связи меж_ ду двумя сущностями, не касаясь количественных показателей. На_ пример, нужно узнать, есть ли у клиента текущие или сберегательные счета, не интересуясь тем, сколько у него счетов каждого типа. Вот за_ прос с несколькими выражениями case, формирующими два столбца выходных данных. Первый показывает, есть ли у клиента текущие счета, а второй – есть ли сберегательные счета:

 

mysql> SELECT c.cust_id, c.fed_id, c.cust_type_cd,
_> CASE
_> WHEN EXISTS (SELECT 1 FROM account a
_> WHERE a.cust_id = c.cust_id
_> AND a.product_cd = 'CHK') THEN 'Y'
_> ELSE 'N'
_> END has_checking,
_> CASE
_> WHEN EXISTS (SELECT 1 FROM account a
_> WHERE a.cust_id = c.cust_id
_> AND a.product_cd = 'SAV') THEN 'Y'
_> ELSE 'N'
_> END has_savings
_> FROM customer c;

 

+_________+_____________+______________+______________+_____________+ | cust_id | fed_id | cust_type_cd | has_checking | has_savings | +_________+_____________+______________+______________+_____________+

|   | 111_11_1111 | I | Y | Y |
|   | 222_22_2222 | I | Y | Y |

 

Примеры выражений case        
           
|   | 333_33_3333 | I | Y | N |
|   | 444_44_4444 | I | Y | Y |
|   | 555_55_5555 | I | Y | N |
|   | 666_66_6666 | I | Y | N |
|   | 777_77_7777 | I | N | N |
|   | 888_88_8888 | I | Y | Y |
|   | 999_99_9999 | I | Y | N |
|   | 04_1111111 | B | Y | N |
|   | 04_2222222 | B | N | N |
|   | 04_3333333 | B | Y | N |
|   | 04_4444444 | B | N | N |

 

+_________+_____________+______________+______________+_____________+ 13 rows in set (0.00 sec)

 

Каждое выражение case включает связанный подзапрос к таблице ac_ count: один для поиска текущих счетов, другой – сберегательных сче_ тов. Поскольку каждый блок when использует оператор exists, условия выполняются, если у клиента есть, по крайней мере, один счет иско_ мого типа.

 

В других случаях нас может интересовать количество встретившихся строк, но лишь постольку поскольку. Например, следующий запрос с помощью простого выражения case подсчитывает количество счетов каждого клиента, а затем возвращает 'None', '1', '2' или '3+':

 

mysql> SELECT c.cust_id, c.fed_id, c.cust_type_cd,
_> CASE (SELECT COUNT(*) FROM account a
_> WHERE a.cust_id = c.cust_id)
_> WHEN 0 THEN 'None'
_> WHEN 1 THEN '1'
_> WHEN 2 THEN '2'
_> ELSE '3+'
_> END num_accounts

_> FROM customer c;

 

+_________+_____________+______________+______________+ | cust_id | fed_id | cust_type_cd | num_accounts | +_________+_____________+______________+______________+

|   | 111_11_1111 | I | 3+ |
|   | 222_22_2222 | I | 2 |
|   | 333_33_3333 | I | 2 |
|   | 444_44_4444 | I | 3+ |
|   | 555_55_5555 | I | 1 |
|   | 666_66_6666 | I | 2 |
|   | 777_77_7777 | I | 1 |
|   | 888_88_8888 | I | 2 |
|   | 999_99_9999 | I | 3+ |
|   | 04_1111111 | B | 2 |
|   | 04_2222222 | B | 1 |
|   | 04_3333333 | B | 1 |
|   | 04_4444444 | B | 1 |

 

+_________+_____________+______________+______________+ 13 rows in set (0.01 sec)


 

226 Глава 11. Условная логика

В этом запросе я не хотел проводить различия между клиентами, име_ ющими более двух счетов, поэтому выражение case просто создает ка_ тегорию '3+'. Подобный запрос может быть полезным при поиске кли_ ентов, с которыми можно связаться и предложить открыть новый счет в банке.

 


Дата добавления: 2015-08-17; просмотров: 33 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Селективная агрегация| Ошибки деления на нуль

mybiblioteka.su - 2015-2024 год. (0.007 сек.)