У меня есть две таблицы:
TableA TableB
id id
amt amt
idUser idTableA
Допустим, следующие данные находятся в таблице A:
1 10 1
2 20 1
3 30 1
4 40 2
5 50 3
6 60 4
7 70 4
, а в таблице B представлены следующие данные:
1 10 1
2 20 2
3 21 2
4 51 5
5 70 7
Все поля не обнуляются.
Если я хочу узнать, какие элементы в Таблице A не имеют «ссылки» на таблицу B (через поле TableB.idTableA), я могу выполнить этот запрос:
SELECT a.id, a.amt
FROM TableA a LEFT JOIN TableB b on b.idTableA = a.id
WHERE b.idTableA IS NULL
и он вернет следующее:
3 30
4 40
6 60
, если я хочу знать, какие элементы в TableA (которые имеют ссылку на tableB) для которых значения amt не идентичны в каждой таблице Iможет сделать:
SELECT a.id, a.amt, b.amt
FROM TableA a INNER JOIN TableB b on b.idTableA = a.id
WHERE a.amt <> b.amt
и он вернется:
2 20 21
5 50 51
Теперь я хотел бы запрос, который выполняет следующее: Возвращает idUsers, для которых только некоторые их записи в TableA имеют ссылку на TableB (это означает, что для idUser также должны быть некоторые записи в TableA без ссылки между двумя таблицами) и для которых по крайней мере одна запись имеет разные суммы между двумя таблицами средистроки, которые связаны между собой.
В моем экзаменеТо есть idUser 1 будет возвращен таким запросом, потому что третья запись в TableA удовлетворяет первому условию (некоторые записи без ссылки), и существует запись, для которой суммы различаются (связанные со значением 2 для idTableA представляют собой суммы 20в Таблице A против 21 в Таблице B)
userId 2 не будет возвращен, так как он не имеет строки, связанной между двумя таблицами,
userId 3 не будет возвращен, поскольку он не имеет строки вТаблица A без ссылки в TableB
userId 4 не будет возвращена, поскольку, хотя в Таблице A есть 1 строка без ссылки, а также 1 строка со ссылкой, строка со ссылкой имеет одинаковые значения для двух таблиц.
Так что на самом деле это смесь двух начальных запросов ...
Спасибо за ваш вклад и мои извинения за базовое форматирование и язык, я надеюсь, что это достаточно ясно:)