2016-07-18 2 views
1

У меня есть 2 таблицы:Объединение 2 колонки из 2 разных таблиц в одну

  • 1 для посещения людей в магазине
  • 1 для покупки, сделанной этими посетителями

Поэтому покупатель должен быть и посетителем.

Вот данные, которые у меня есть:

PURCHASE_TABLE 

day   user_id_purchase item_id_purchase Type  
---------- ---------------- ---------------- --------  
26/05/2016 AAA    47332    Purchase   
19/05/2016 BBB    46523    Purchase   

VISIT_TABLE

day   user_id_visit Type 
---------- ------------- ----- 
18/06/2016 AAA   Visit  
26/05/2016 AAA   Visit  
19/05/2016 BBB   Visit  
18/05/2016 CCC   Visit 

Вот что я хотел бы иметь: dayuser_idtypeitem_id из обеих таблиц

С результаты:

day   user_id type  item_id 
---------- ------- -------- ------- 
18/06/2016 AAA  Visit 
26/05/2016 AAA  Visit 
19/05/2016 BBB  Visit 
18/05/2016 CCC  Visit 
26/05/2016 AAA  Purchase 47332 
19/05/2016 BBB  Purchase 46523 

Тем не менее я не могу это сделать. В результате я получил умножение количества строк: я получил 4 строки (посещение) * 2 строки (покупка) вместо 4 строк + 2 строки. На самом деле, я каждую покупку и каждый щелчок при покупке ...

Вот запрос, который я использую:

SELECT 
    visits.user_id, 
    coalesce(visits.day_visit, purchases.day_purchase) AS day, 
    coalesce(visits.type, purchases.type) AS type, 
    purchases.item_id_purchase 
FROM 
    (SELECT DISTINCT 
    day   AS day_visit, 
    user_id AS user_id, 
    'Visit' AS type 
    FROM visit 
    WHERE DAY >= '2016-01-01') visits, 
    (SELECT DISTINCT 
    day   AS day_purchase, 
    user_id_slow AS user_id, 
    item_id  AS item_id_purchase, 
    'Purchase'  AS type 
    FROM purchase 
    WHERE AND Day >= '2016-05-02') purchases 
WHERE visits.user_id_display = purchases.user_id 

более руда менее похожа на то, что я нашел здесь: How can I merge the columns from two tables into one output? Я думаю, что это Безразлично» t, так как я использую столбцы, которые отличаются между двумя таблицами.

Я попробовал с JOINs (как INNER AND LEFT), так и не принес лучшие результаты.

У вас есть идея, как я могу получить результат, который я желаю?

Спасибо,

JP

+1

Вам нужно указать, что 'distinct' в главном' п select'. Не только то, что отличается от предложения 'from' от ваших данных' join'. –

ответ

2

Вы хотите, чтобы все строки оба таблиц отображаются, которые вы можете сделать с UNION и подделки недостающий столбец из Visit таблицы.

SELECT day_date, user_id, type, NULL AS item_id 
FROM Visit 
UNION 
SELECT day_date, user_id, type, item_id 
FROM Purchase 
ORDER BY type DESC, user_id ASC , day_date ASC 

Что дает результат

day_date  user_id type  item_id 
------------ ------- ---------- ------- 
"18-06-2016" "AAA" "Visit"  "NULL" 
"26-05-2016" "AAA" "Visit"  "NULL" 
"19-05-2016" "BBB" "Visit"  "NULL" 
"18-05-2016" "CCC" "Visit"  "NULL" 
"26-05-2016" "AAA" "Purchase" "47332" 
"19-05-2016" "BBB" "Purchase" "46523" 
+0

Отлично, спасибо Тони! –

Смежные вопросы