Я делаю это:Как использовать не Равно в Postgresql присоединяется
select * from schema2."Student" a INNER JOIN
schema1."StudentMapping" b on (a."StudentID" = b."StudentID")
where a."IsRemoved" = false AND b."IsRemoved" = false
получить только те записи из таблицы Student
, которые присутствуют в StudentMapping
таблицы, здесь IsRemoved
колонка я использую для мягкого удаления (т.е. когда всякая запись должна быть удалена из любой из этих таблиц, тогда я устанавливаю ее только на true
, поэтому для IsRemoved = false
записей присутствуют в таблицах), и запрос работает нормально. Теперь то, что я хотел, чтобы получить все эти записи из Student
таблицы, которые не присутствуют в StudentMapping
таблице, поэтому я попытался это:
select * from schema2."Student" a INNER JOIN
schema1."StudentMapping" b on (a."StudentId" != b."StudentId")
where a."IsRemoved" = false AND
b."IsRemoved" = false
, но это дает много записей, больше, чем я ожидал, что случилось с этим запрос или есть другой способ в Postgresql
, чтобы получить все соответствующие записи из одной таблицы, которых нет в другой таблице.
Помимо: крайне редко, что вам действительно нужно сделать '= false' или '= true' на любом строго типизированном языке. Всегда просто просто использовать логическое значение: '! A." IsRemoved "AND! B." IsRemoved ". Кроме того, рассмотрите возможность устранения смешанного случая и цитирования при создании таблицы: 'is_removed' вместо' 'IsRemoved ''. Эти обложки и кавычки всегда будут для всех хлопот. (В отличие от [некоторых баз данных] (https://www.oracle.com/database/index.html), PG имеет * много * места для более длинных, более четких имен.) – jpmc26