我有以下查询:
SELECT om.member_id
FROM org_member om
WHERE om.org_id = 1
AND om.member_id NOT IN (
SELECT member_id
FROM org_group_member
WHERE member_id = om.member_id AND is_pending = 'N')
ORDER BY om.member_id
NOT IN中的子查询在完整查询之外自行运行时,不返回特定成员标识的行。但是,在运行完整查询时,子查询不会导致从结果集中排除成员标识,即使子查询在单独运行时没有返回任何行。
例如,如果在子查询中使用om.member_id为1作为独立查询,则不返回任何行。但是,如果运行完整查询,则返回成员标识1。
我显然遗漏了关于NOT IN子句的内容。
表org_member有: org_id member_id
表org_group_member有: org_id grp_id 会员ID is_pending(Y或N)
我需要org_group_member表中不存在的所有成员的结果集,或者仅在org_group_table中使用is_pending = Y(因为成员可以在多个组中,所以成员可以有多行)
e.g org_group_member
org_id mbr_id grp_id is_pending
1 1 1 Y
1 1 2 Y
1 2 1 N
1 2 2 Y
我的结果集应该包含成员1和3但不包含2。 应该包括3,因为它不存在于org_group_member表
中答案 0 :(得分:1)
从where子句中删除 member_id = om.member_id 。它与 NOT IN 条款形成鲜明对比。
答案 1 :(得分:0)
在您的示例中,您声明子查询不返回member_id
为1的行。这意味着当您使用NOT IN
时,您基本上要求任何不为空的行数据集,所以你会得到一切。
如果您的子查询返回member_id
为1的行,则完整查询将缺少member_id
1的结果。
答案 2 :(得分:0)
SELECT om.member_id
FROM org_member om
JOIN org_group_member ogm ON ogm.member_id=om.membeer_id
WHERE om.org_id = 1
AND ogmis_pending = 'N'
ORDER BY om.member_id
猜猜你只需要没有待处理的成员ID
关于你的查询,如果子查询返回空,结果为真,例如42 not in {}
更新:根据新要求
SELECT om.member_id 来自org_member om LEFT JOIN org_group_member ogm ON ogm.member_id = om.membeer_id 在哪里om.org_id = 1 AND(ogm.is_pending ='N'OR ogm.member_id为null) ORDER BY om.member_id
答案 3 :(得分:0)
也许你在ORG_MEMBER中有MEMBER_ID = NULL的记录?在这种情况下,NOT IN将成立。
答案 4 :(得分:0)
以下查询应该有效。
SELECT om.member_id
FROM org_member om
WHERE om.org_id = 1
AND om.member_id NOT IN (
SELECT member_id
FROM org_group_member
WHERE is_pending = 'N')
ORDER BY om.member_id
答案 5 :(得分:0)
尝试此查询。
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
-> at MyLogicTest.testEnabled
E.g. thenReturn() may be missing.
Examples of correct stubbing:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
Hints:
1. missing thenReturn()
2. you are trying to stub a final method, which is not supported
3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction if completed