я борюсь с запросом SQL, она должна быть основана на структуре таблицы, как это:ВЫБРАТЬ синтаксис Oracle для получения dupicate записей с помощью EXISTS и директив
PID (type VARCHAR) ATTR (type VARCHAR)
U1 attribute1
U1 locale
U2 attribute1
U2 locale
U3 attribute1
U3 attribute2
То, что я хотел бы сделать, это выбрать все PID
S не имеющих запись, содержащую строку «языковой» в столбце атр, поэтому в данном примере я показал, этот запрос должен возвращать «U3»
Я попытался запросы, как:
SELECT DISTINCT PID p
FROM tablename
WHERE NOT EXISTS (SELECT * FROM table
WHERE PID = 'p' AND ATTR NOT IN 'locale');
и тому подобное, но я либо не правильно понял синтаксис SQL, либо делал некоторые другие ошибки - я не получаю правильных результатов.
Есть ли у кого-нибудь идеи, что может пойти не так?
P.S. Ребята, должная обратная связь, я получил, я должен сделать что-то неправильно, позвольте мне, пожалуйста, заполнить некоторую информацию, может быть, это поможет.
Таблица, в которой я говорю, представляет собой стандартную таблицу стека SAP J2EE (UME_STRINGS), содержащую пользовательские данные (UME в терминах SAP - механизм управления пользователями). Он содержит много других полей рядом с PID и ATTR, я не рассматривал их, так как кажется, что они не имеют значения.
Однако мне нужно найти все учетные записи пользователей без установленного языкового стандарта. Так как пользовательское управление работает «ленивым», очевидно, такая запись (запись с произвольным PID и значением «locale» в ATTR) будет создана только после установки локали. Это означает, что на самом деле в таблице имеется много произвольных записей (такое же значение PID), но ни одно из них не имеет значения «locale» в поле ATTR. Таким образом, алго может быть:
1.) группироваться таблицей на идентичном PID-
2.) итерация по скоплению и проверить внутри каждый кластер, если нет записи с «локал» в поле атра в этот кластер, добавить PID к выходу
3.) вернуть список найденного PID-
Всем это будет сделано в идеале с помощью одного запроса SQL.
Доступный JAVA API (com.sap.security.api.IUserSearchFilter) не позволяет устанавливать нулевые значения для поиска, поэтому у меня нет выбора, кроме как напрямую обращаться к БД.
Кроме записей «локали», конечно, многие другие, потому что каждый атрибут для пользователя, группы, роли и т.д. моделируется таким образом - такие вещи, как U1 - attribute1 и т.д.
Так что мне нужно это запрос давая мне PID для пользователей, у которых нет записи, как «PID -„локаль“в ATTR
Если мое описание запутанной или неполной, пожалуйста, спросите Еще раз спасибо
ПФС..добавлены несколько скриншотов с данными выборки и структуры таблицы
Can PID be null? (Вы можете проверить свои фактические данные: 'select count (PID), где PID равен null'). – mathguy
Нет, из-за ER всегда имеет значение –