MySQL сравни два результата и покажи дельту

Итак, у меня есть таблица с именем "food", и в этой таблице у меня есть два столбца "groceryBag" и "item" следующим образом:

groceryBag    item
----------    -----
1             banana
1             eggs
2             ham
1             apple
1             chicken
2             apple
2             eggs

Моя цель состоит в том, чтобы вернуть результаты, которые отличаются между сумкой 1 и сумкой 2. Таким образом, в моем примере выше результаты будут такими:

groceryBag    item
----------    -----
1             banana
2             ham
1             chicken

Первоначально я собирался подойти к этому с помощью python, проверив, находится ли каждый предмет в сумке 1 и в сумке 2, а затем проверил, находится ли каждый предмет в сумке 2 в сумке 1. Это становится очень трудоемким, когда мешки очень большой. Я также подумал о том, чтобы вывести результаты обоих запросов в два файла, а затем разложить их. Я надеялся, что был эффективный способ MySQL для сравнения двух результатов запроса и только показа дельт. Любая помощь будет принята с благодарностью.

2 ответа

Подсчитайте количество строк для каждого элемента. Если предмет находится только в 1 ряду, то он только в 1 сумке.

SELECT MAX(bag) AS bag, item
FROM foo
GROUP BY item
HAVING COUNT(*) = 1

То, что я искал, было:

select * from (
select f.groceryBag, f.item as 1item from foo f where f.groceryBag = 1) 
as q1 where q1.1item no in ( 
select f.item from foo f where f.groceryBag = 2)        

Затем сделайте обратное, чтобы получить то, что находится в сумке 2, но не в сумке 1.

Другие вопросы по тегам