Читайте также: |
|
Условная логика – это просто способность выбирать одно из направле_ ний выполнения программы. Например, при запросе информации о клиенте может потребоваться в зависимости от типа клиента извлечь столбцы fname/lname таблицы individual или столбец name таблицы busi_ ness. С помощью внешних соединений можно было бы выбрать обе строки и дать возможность вызывающему определить, какую из них использовать:
mysql> | SELECT c.cust_id, c.fed_id, c.cust_type_cd, | |
_> | CONCAT(i.fname, ' ', i.lname) indiv_name, | |
_> | b.name business_name | |
_> | FROM | customer c LEFT OUTER JOIN individual i |
_> | ON | c.cust_id = i.cust_id |
_> | LEFT OUTER JOIN business b | |
_> | ON | c.cust_id = b.cust_id; |
+________+____________+_____________+________________+_______________________+ | cust_id | fed_id | cust_type_cd | indiv_name | business_name | +________+____________+_____________+________________+_______________________+
| | 1 | 111_11_1111 | I | | James Hadley | | NULL | | |
| | 2 | 222_22_2222 | I | | Susan Tingley | | NULL | | |
| | 3 | 333_33_3333 | I | | Frank Tucker | | NULL | | |
| | 4 | 444_44_4444 | I | | John Hayward | | NULL | | |
| | 5 | 555_55_5555 | I | | Charles Frasier | NULL | | |
Что такое условная логика? | ||||||
| | | 666_66_6666 | I | | John Spencer | | NULL | | | ||
| | | 777_77_7777 | I | | Margaret Young | | NULL | | | ||
| | | 888_88_8888 | I | | Louis Blake | | NULL | | | ||
| | | 999_99_9999 | I | | Richard Farley | | NULL | | | ||
| | | 04_1111111 | | B | | NULL | | Chilton Engineering | | | |
| | | 04_2222222 | | B | | NULL | | Northeast Cooling Inc. | | ||
| | | 04_3333333 | | B | | NULL | | Superior Auto Body | | | |
| | | 04_4444444 | | B | | NULL | | AAA Insurance Inc. | | |
+________+____________+_____________+________________+_______________________+ 13 rows in set (0.13 sec)
Вызывающий может взглянуть на значение столбца cust_type_cd и вы_ брать, какой столбец использовать – indiv_name или business_name. Од_ нако вместо этого можно было бы применить условную логику, вос_ пользовавшись выражением case, чтобы определить тип клиента и воз_ вратить соответствующую строку.
mysql> | SELECT c.cust_id, c.fed_id, |
_> | CASE |
_> | WHEN c.cust_type_cd = 'I' |
_> | THEN CONCAT(i.fname, ' ', i.lname) |
_> | WHEN c.cust_type_cd = 'B' |
_> | THEN b.name |
_> | ELSE 'Unknown' |
_> | END name |
_> | FROM customer c LEFT OUTER JOIN individual i |
_> | ON c.cust_id = i.cust_id |
_> | LEFT OUTER JOIN business b |
_> | ON c.cust_id = b.cust_id; |
+_________+_____________+________________________+
| cust_id | fed_id | name |
+_________+_____________+________________________+
| | | | 111_11_1111 | | James Hadley | | | |
| | | | 222_22_2222 | | Susan Tingley | | | |
| | | | 333_33_3333 | | Frank Tucker | | | |
| | | | 444_44_4444 | | John Hayward | | | |
| | | | 555_55_5555 | | Charles Frasier | | | |
| | | | 666_66_6666 | | John Spencer | | | |
| | | | 777_77_7777 | | Margaret Young | | | |
| | | | 888_88_8888 | | Louis Blake | | | |
| | | | 999_99_9999 | | Richard Farley | | | |
| | | | 04_1111111 | | Chilton Engineering | | |
| 11 | 04_2222222 | Northeast Cooling Inc. |
| | | | 04_3333333 | | | Superior Auto | Body | | | |
| | | | 04_4444444 | | | AAA Insurance | Inc. | | |
+_________+_____________+________________________+ 13 rows in set (0.00 sec)
Эта версия запроса возвращает один столбец name. Он формируется выра_ жением case, начинающимся во второй строке запроса, которое в дан_
218 Глава 11. Условная логика
ном случае проверяет значение столбца cust_type_cd и возвращает имя/ фамилию физического лица или название фирмы.
Дата добавления: 2015-08-17; просмотров: 46 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Естественные соединения | | | Выражение case |