2表1结果,一个棘手的SQL

问题描述 投票:0回答:1

经过多年潜伏在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)) 

((不用担心定义,为了简单起见,我只是“虚拟”它们))>

一个用户可以没有一个角色,也可以没有多个角色。您如何将它们绑在一起?那么表USERS

中的SYSIDMANDTBNAME,必须匹配ROLES表的内容,字段SYSIDMANDT 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")

只要我仅通过一个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/

感谢您的帮助和长期的歉意

经过多年潜伏在stackoverflow之后,我终于有必要向您寻求帮助,以寻求一些帮助。上下文:我是一名开发人员,正在使用我提取的信息...

sql join
1个回答
0
投票
您不能同时拥有两个
© www.soinside.com 2019 - 2024. All rights reserved.