2015-09-16 3 views
-1

В основном я хочу, чтобы классифицировать своих клиентов, на основании которых другие таблицы они появляются, я сомневаюсь, что этот синтаксис отдаленно правильно, но, надеюсь, суть приходит через:.MySQL: создание новых столбцов на основе содержимого других таблиц

SELECT customer_id, 
CASE customer_id 
WHEN [customer_id is in tableA] THEN 'customer_segment_1' 
WHEN [customer_id is in tableB] THEN 'customer_segment_2' 
ELSE 'customer_segment_3' END 
AS 'customer_segment' 
FROM customers 
+0

Да. это совершенно неверно. вам нужно «присоединить» к вашей таблице A таблицуB, а затем значения будут доступны для использования в инструкции 'case'. –

+0

Можете ли вы поделиться своими стэками таблиц и некоторыми образцами данных? – Mureinik

+0

В чем причина нисходящего потока по этому вопросу? Мне кажется очень хорошо. – zedfoxus

ответ

1

чтобы определить, является ли «customer_id в tableA» вам нужно просто присоединиться к этой таблице, используя left outer для учета идентификаторов, которые не в tableA:

SELECT tableC.customer_id, 
     CASE 
      WHEN tableA.customer_id is not null THEN 'customer_segment_1' 
      WHEN tableB.customer_id is not null THEN 'customer_segment_2' 
    ELSE 'customer_segment_3' END 
    AS customer_segment 
FROM tableC 
LEFT OUTER JOIN tableA on tableC.customer_id = tableA.customer_id  
LEFT OUTER JOIN tableB on tableC.customer_id = tableB.customer_id 
+0

Я знал, что мне не хватает чего-то такого фундаментального. Весьма признателен! – jcb4th

0

что-то вроде:

SELECT tableC.customer_id, 
CASE WHEN tableA.customer_id IS NOT NULL THEN 'SegmentA' 
    WHEN tableB.customer_id IS NOT NULL THEN 'SegmentB' ELSE 'SegmentC' END CASE AS Segment 
FROM tableC LEFT JOIN tableA ON tableC.customer_id=tableA.customer_id 
    LEFT JOIN tableB ON tableC.customer_id=tableB.customer_id 
Смежные вопросы