После многих лет сокрытия stackoverflow у меня наконец-то возникла необходимость обратиться к вам, гуру разработки, в поисках небольшой помощи.
Контекст:
Я разработчик, играющий с информацией, которую я извлекаю из SAP. Я извлекаю информацию и создаю две таблицы в памяти, используя базу данных H2.
Мои таблицы выглядят так:
CREATE TABLE USERS
(
SID VARCHAR(255),
SYSID VARCHAR(5),
MANDT VARCHAR(3),
BNAME VARCHAR(255),
GLTGV DATE,
GLTGB DATE,
USTYP VARCHAR(2),
LOCNT VARCHAR(3),
UFLAG VARCHAR(3),
TRDAT DATE,
LTIME VARCHAR(255),
CLASS VARCHAR(255),
PWDCHGDATE DATE,
PROFILE VARCHAR(255)
)
CREATE TABLE ROLES
(
SID VARCHAR(255),
SYSID VARCHAR(5),
MANDT VARCHAR(3),
UNAME VARCHAR(255),
AGR_NAME VARCHAR(255)
)
Не беспокойтесь об определениях, я просто их «пустышка» для простоты.
Один пользователь может не иметь ни одной или многих ролей. Как вы ie их вместе?
Хорошо SYSID
, MANDT
и BNAME
из таблицы USERS
должны соответствовать содержимому таблицы ROLES
, столбцов SYSID
, MANDT
и UNAME
(все того же типа)
Итак, я создал этот запрос
SELECT DISTINCT
t1.SID,
t1.SYSID,
t1.MANDT,
t1.BNAME,
t1.GLTGV,
t1.GLTGB,
t1.USTYP,
t1.LOCNT,
t1.UFLAG,
t1.TRDAT,
t1.LTIME,
t1.CLASS,
t1.PWDCHGDATE,
t1.PROFILE
FROM
USERS AS t1,
ROLES AS t2
WHERE
t1.SYSID = t2.SYSID AND
t1.MANDT = t2.MANDT AND
t1.BNAME = t2.UNAME AND
(t2.AGR_NAME = "ZTEST_ROLE")
, который работает хорошо, пока я запрашиваю только одну РОЛЬ.
Чтобы запросить более одной роль, делаю
SELECT DISTINCT
t1.SID,
t1.SYSID,
t1.MANDT,
t1.BNAME,
t1.GLTGV,
t1.GLTGB,
t1.USTYP,
t1.LOCNT,
t1.UFLAG,
t1.TRDAT,
t1.LTIME,
t1.CLASS,
t1.PWDCHGDATE,
t1.PROFILE
FROM
USERS AS t1,
ROLES AS t2
WHERE
t1.SYSID = t2.SYSID AND
t1.MANDT = t2.MANDT AND
t1.BNAME = t2.UNAME AND
(t2.AGR_NAME = "ZTEST_ROLE" OR t2.AGR_NAME = "ZTEST_ROLE2")
Тоже работает. Вы могли бы использовать этот запрос, если хотите получить информацию от всех пользователей, которые имеют ZTEST_ROLE или ZTEST_ROLE2 в качестве ролей.
Теперь вот моя проблема: я не могу заставить ее работать, если я хочу выбрать всех пользователей с обеими ролями ZTEST_ROLE и ZTEST_ROLE2 . мой запрос всегда возвращает 0 строк
Вот запрос, который я использую
SELECT DISTINCT
t1.SID,
t1.SYSID,
t1.MANDT,
t1.BNAME,
t1.GLTGV,
t1.GLTGB,
t1.USTYP,
t1.LOCNT,
t1.UFLAG,
t1.TRDAT,
t1.LTIME,
t1.CLASS,
t1.PWDCHGDATE,
t1.PROFILE
FROM
USERS AS t1,
ROLES AS t2
WHERE
t1.SYSID = t2.SYSID AND
t1.MANDT = t2.MANDT AND
t1.BNAME = t2.UNAME AND
(t2.AGR_NAME = "ZTEST_ROLE" AND t2.AGR_NAME = "ZTEST_ROLE")
Я играл с этим некоторое время, и я не вижу, где моя ошибка
Для удобства и на случай, если вы захотите попробовать это в Интернете, я использовал https://sqliteonline.com/
Я ценю вашу помощь и приношу свои извинения за длинный пост