Поиск неравных строк в двух таблицах

Я выполняю запрос левого соединения, чтобы сравнить две таблицы для любых значений, которые не равны друг другу в столбцах f9 и sumoff6, ТОЛЬКО если столбцы F1 одинаковы. Если они разные, я бы вычел их.

Результаты, которые я получаю, показывают одинаковые значения, которые уже есть в обеих таблицах. Мне нужно, чтобы столбцы f1 совпадали в обеих таблицах, но если их значения в столбцах sumoff6 и f9 не совпадают, отобразите их и вычтите их. F1 уникален для обеих таблиц. Помните, что в таблице операторов может быть больше строк. Я использую представление MS Access SQL.

Запрос

SELECT statement.f1, statement.f9
FROM statement 
LEFT JOIN allocation_final ON statement.[f1] = allocation_final[f1]
WHERE [allocation_final].sumoff6 <> statement.f9

Таблица выписки:

f1     f9
-----------------
1      135.58
2      166.30
3       40.22 
4       86.46
5      170.33
6       96.40

allocation_final:

f1     SumOff6
--------------
1      135.58
2      166.30
3       40.00
4       86.46
5      170.33
6       40.22 
7       22.40
8       70.00
9       96.40
10      50.00

Результаты

f1     f9                 
--------------
1      135.58
2      166.3
4       86.46
5      170.33

Обновлять:

Я хочу получить результат, если f1 = f3 и f3 <> sumoff6 затем отобразить вывод. Как вы видите ниже, например, он все равно отображает результат, если он такой же. Посмотрите на первую строку, которой не должно быть, потому что f9 = sumoff6.

запрос:

SELECT statement.f1, statement.f9, allocation_2.[f3], allocation_2.sumoff6
FROM allocation_2 LEFT JOIN statement ON allocation_2.[f3]=statement.f1
WHERE statement.f9 <> allocation_2.sumoff6
GROUP BY statement.f1, statement.f9, allocation_2.[f3], allocation_2.sumoff6
ORDER BY statement.f1;

Выход:

f1            f9     f3        sumoff6
--------------------------------------
123456789   135.58  123456789   135.58
111111111   166.3   111111111   66.3
222222222   86.46   222222222   86.46
333333333   170.33  333333333   170.33
444444444   135.58  444444444   35.58
555555555   125.74  555555555   125.74
666666666   73.49   666666666   23.49
777777777   187.99  777777777   87.99

если я вас не неправильно понял. Вы хотите объединить две таблицы в столбце f1 и в совпадающих строках, столбец sumoff6 и столбец f9 одинаковый, затем отобразите, если они не совпадают, а затем вычтите их. все в порядке? Каков ваш ожидаемый результат?

Harun KARATAŞ 16.08.2018 14:29

Хотите присоединиться к таблицам с уникальными значениями в столбце f1. Я хочу найти, где различаются столбцы f9 и sumoff6, а затем вычесть те столбцы, которые равны f1, но отличаются f9 / sumoff6

btava001 16.08.2018 15:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
145
2

Ответы 2

SELECT statement.f1, iif ([allocation_final].sumoff6 = statement.f9, statement.f9, [allocation_final].sumoff6 - statement.f9)
FROM statement LEFT JOIN allocation_final 
ON statement.[f1] = allocation_final[f1]

Привет, Марлан. Этот запрос по-прежнему вычитает столбцы f9, sumoff6, даже если allocation_final.f1 <> statement.f1

btava001 16.08.2018 19:17

Не уверен, что это потому, что f1 в обеих таблицах не соответствует точно строка за строкой, поскольку в таблице операторов больше строк.

btava001 16.08.2018 19:23
SELECT 
switch(t1.[sumoff6] is null,t.[f9] - t.[sumoff6],
t1.[sumoff6] is not null, t.[f9])
FROM statement 
LEFT JOIN allocation_final t ON statement.[f1] = allocation_final[f1] 
LEFT JOIN allocation_final t1 ON statement.[f1] = allocation_final[f1] AND 
statement.[f9] = allocation_final[sumoff6]

Довольно просто, используйте два объединения, каждое из которых представляет два условия, а затем случай, когда будет вычитаться, когда оба условия выполнены (T1), или просто дать первое значение, когда выполняется только одно условие (T).

будет ли это работать с доступом к просмотру sql? потому что я получаю синтаксическую ошибку (отсутствует оператор) в этой части запроса. СЛУЧАЙ, КОГДА t1. [Sumoff6] равно нулю ТОТ t. [F9] - t. [Sumoff6] Когда t1. [Sumoff6] не равно нулю, ТО t. [F9] END as [total]

btava001 16.08.2018 19:14

давая мне здесь синтаксическую ошибку: оператор. [f1] = allocation_final. [f1] LEFT JOIN allocation_final t1 ON statement. [f1] = allocation_final. [f1]

btava001 16.08.2018 19:39

Привет, Мэтт, я получил запрос на работу. У меня возник вопрос. Это дает мне расхождения между столбцами f9 и sumoff6, но неточно. Я думаю, это связано с тем, что в столбце оператора больше строк, поскольку f1 не совпадает в обеих таблицах в ОДНОЙ строке, он думает, что значение f9 отсутствует, но на самом деле это не так. Есть ли способ выполнить поиск по столбцу f1 в другой таблице, чтобы убедиться, что значение sumoff6 отличается или нет? Другими словами, столбец f1 присутствует в обеих таблицах только в разных строках, и запрос считает, что его нет в другой таблице.

btava001 17.08.2018 15:01

по всем этим запросам я получаю помощь только в том случае, если f1 совпадает строка за строкой в ​​обеих таблицах.

btava001 17.08.2018 15:04

Я сделал обе таблицы равными по столбцам F1 без повторяющихся строк. Однако я все еще получаю данные с одинаковыми строками в моем выходном запросе, хотя я поставил f1 = f1 и f9 <> sumoff6. Может кто-нибудь помочь? Я использую левое соединение, поэтому не понимаю, почему я получаю это.

btava001 22.08.2018 15:02

пожалуйста, посмотрите мой исходный пост после "обновления". Я только что отредактировал набор результатов, который вы просили.

btava001 24.08.2018 22:36

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