2016-07-15 8 views
0

у меня есть две таблицы, как это:разница между двумя таблицами

Table1: 
LOAD * INLINE [ 
OrderItem 
OI1 
OI2 
OI3 
OI4 
OI6 
]; 

Table2: 
LOAD * INLINE [ 
OrderItem 
OI2 
OI3 
OI4 
OI5 
OI6 
]; 

Теперь я хочу третью таблицу, которая показывает мне, что только OI5 не в «Table1»! Решение Listbox также в порядке.

Я пробовал некоторые вещи с помощью бит, но это не сработало. Я также читал this , но он только показал мне разницу между двумя таблицами в списке. Смотрите ниже:

Table1: 
LOAD * INLINE [ 
OrderItem 
OI1 
OI2 
OI3 
OI4 
OI6 
]; 

Concatenate(Table1) 
Table2: 
LOAD * INLINE [ 
OrderItem 
OI2 
OI3 
OI4 
OI5 
OI6 
]; 

INNER JOIN (Table1) 
LOAD * 
WHERE "Only in One Table?" 
; 

// Here I want "OI5" as an output 
Difference: 
LOAD 
    OrderItem, 
    if(count(OrderItem)<2,-1) as "Only in One Table?" 
RESIDENT Table1 GROUP BY OrderItem 
; 

Результат:

enter image description here

Спасибо!

ответ

2

Одно из возможных решений:

Table1: 
LOAD * INLINE [ 
OrderItem1 
OI1 
OI2 
OI3 
OI4 
OI6 
]; 

Table2: 
LOAD * INLINE [ 
OrderItem2 
OI2 
OI3 
OI4 
OI5 
OI6 
]; 

Missings: 
Load 
    OrderItem2 as MissingsOrderItem 
Resident 
    Table2 
Where 
    Not Exists(OrderItem1, OrderItem2) 
; 

После перезагрузки результат будет:

enter image description here

+0

Спасибо, хороший ответ, но мне просто нужно показать только OI5 в списке «MissingsOrderItem». – Blind0ne

+0

Отредактировал мой ответ, чтобы показать только 'OI5' –

-1

Выберите LOAD * из таблицы 2, где LOAD не включен (выберите LOAD из таблицы 1);

+0

У меня нет ODBC-соединение! Всего две таблицы в скрипте. – Blind0ne

+0

Имитировать внутренний запрос, используя вложенный цикл. –

+0

Можете ли вы показать мне, как вы это сделаете? Звучит интересно ^^ – Blind0ne

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