Создайте столбец псевдонимов с пользовательской строкой в ​​MySQL - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть такие таблицы MySQL:

##customer##
+-----------+----+---------+
|customer_id|name|telephone|
+-----------+----+---------+
|     1     |Andi|+62932011|
|     2     |Boby|+62928291|
|     3     |Jane|+62932212|
|     4     |John|+62999021|
|     5     |Beth|+62999021|
|     6     |Noel|+62999021|
+-----------+----+---------+

##plus_membership##
+-----------------+-----------+-------+------------+
|plus_membership_id|customer_id|status |requested_at|
+------------------+-----------+-------+------------+
|        1         |     1     |   1   | 2018-11-01 |
|        2         |     2     |   0   | 2018-11-03 |
|        3         |     4     |   2   | 2018-11-04 |
|        4         |     6     |   1   | 2018-11-05 |
+------------------+-----------+-------+------------+

В приведенной выше структуре есть две таблицы: первая - customer с customer_id в качестве первичного ключа, а вторая - plus_membership с внешним ключом customer_id, таблица plus_membership является таблица для отображения запроса, если запрос клиента становится членом с плюсом, статус 1 означает, что клиент считается пользователем с плюсом. Мне нужно выбрать таблицу клиентов и добавить столбец псевдонимов. Допустим, имя столбца псевдонимов является членством, которое показывает только regular или plus, plus означает, что клиент в состоянии plus_membership имеет значение 1, и регулярно, если клиент не существует в таблице plus_membership или статус не 1 в таблице членства. например:

SELECT *, .... AS membership FROM customer;

+-----------+----+---------+----------+
|customer_id|name|telephone|membership|
+-----------+----+---------+----------+
|     1     |Andi|+62932011|   Plus   |
|     2     |Boby|+62928291|  Regular |
|     3     |Jane|+62932212|  Regular | 
|     4     |John|+62999021|  Regular |
|     5     |Beth|+62999021|  Regular |
|     6     |Noel|+62999021|   Plus   |
+-----------+----+---------+----------+

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Мы используем EXISTS или IN для поиска данных в другой таблице.

select customer_id, name, telephone,
  case when customer_id in (select customer_id from plus_membership where status = 1)
       then 'Plus' else 'Regular' end as membership
from customer
order by customer_id;
0 голосов
/ 05 ноября 2018

Вы можете использовать Left Join между двумя таблицами и использовать Case .. When условные выражения для оценки membership соответственно.

Left Join обеспечит учет всех клиентов из таблицы customer, независимо от того, имеют ли они соответствующую строку в таблице plus_membership или нет.

SELECT
 c.customer_id, 
 c.name, 
 c.telephone, 
 (CASE WHEN pm.status = 1 THEN 'Plus' ELSE 'Regular' END) AS membership
FROM customer AS c
LEFT JOIN plus_membership AS pm 
  ON pm.customer_id = c.customer_id 

Другим подходом может быть использование коррелированного подзапроса и Exists(). Обычно этот будет менее эффективным, чем подход с левым соединением.

SELECT 
  c.customer_id, 
  c.name, 
  c.telephone, 
  CASE WHEN EXISTS (SELECT 1 
                    FROM plus_membership AS pm 
                    WHERE pm.customer_id = c.customer_id AND 
                          pm.status = 1
                   )
       THEN 'Plus' 
       ELSE 'Regular' 
  END AS membership 
FROM customer AS c
...