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.