0

请找到以下问题并进行确认。

Step-01:根据加入条件,从表中获取值并填充。由于表 B 中没有匹配值,所有列都填充了 NULL 值。

列:B.OP_TYPE,B.DEMO_ID

ksql> SELECT PLAN_ID,A_OP_TYPE,B.OP_TYPE,A.PRIMARY_DEMO_ID,B.DEMO_ID \
FROM TBL_PLN_PRO_DIV_SDIV A \
LEFT JOIN  TBL_MS_TARGET_GROUP11 B \
ON (A.PRIMARY_DEMO_ID=B.DEMO_ID);
382591 | U | null | 3085 | null

与 where 条件相同的选择查询给出与预期相同的结果。

ksql> SELECT PLAN_ID,A_OP_TYPE,B.OP_TYPE,A.PRIMARY_DEMO_ID,B.DEMO_ID \
FROM TBL_PLN_PRO_DIV_SDIV A \
LEFT JOIN  TBL_MS_TARGET_GROUP11 B \
ON (A.PRIMARY_DEMO_ID=B.DEMO_ID) WHERE B.OP_TYPE IS NULL;
382591 | U | null | 3085 | null

但是当我们尝试使用 Not Equal where condition 进行选择时,相应的查询没有给出正确的结果。B.OP_TYPE != 'D' - 这是包含 B.OP_TYPE 的条件为空的地方

ksql> SELECT PLAN_ID,A_OP_TYPE,B.OP_TYPE,A.PRIMARY_DEMO_ID,B.DEMO_ID \
FROM TBL_PLN_PRO_DIV_SDIV A \
LEFT JOIN  TBL_MS_TARGET_GROUP11 B \
ON (A.PRIMARY_DEMO_ID=B.DEMO_ID) WHERE B.OP_TYPE != 'D';
4

2 回答 2

0

到目前为止,您所描述的内容与 SQL 的行为方式并不矛盾。重要的是 NULL 表示没有价值。所以FOO != 'B'不匹配whereFOO is NULL

您没有提供样本数据TBL_PLN_PRO_DIV_SDIVTBL_MS_TARGET_GROUP11因此很难在这里提供明确的帮助。

如果您的查询没有返回行 whereA_OP_TYPE != 'D'那么我同意有些事情是不正确的,因为您已经表明存在行 where A_OP_TYPE='U'(ie != 'D')。但是,如果您没有匹配的记录TBL_MS_TARGET_GROUP11,其中 的OP_TYPE值不是D,您将不会得到匹配。

于 2018-09-24T08:48:23.193 回答
0

员工表:

从 emp1 中选择 empno、ename、job、deptno;

7839 国王总裁 10 7698 布莱克经理 30 7902 福特分析师 20 7369 史密斯文员 20

从 dept1 中选择 *;

10 会计纽约 30 销售芝加哥

没有任何 where 条件的左连接:

select empno,ename,job,a.deptno,a.DEPTNO,DNAME from emp1 a left join dept1 b on (a.DEPTNO = b.DEPTNO)

7839    KING    PRESIDENT   10  10  ACCOUNTING
7698    BLAKE   MANAGER     30  30  SALES
7369    SMITH   CLERK       20  20  
7902    FORD    ANALYST     20  20  

where condition with Null value 

select empno,ename,job,a.deptno,a.DEPTNO,DNAME from emp1 a left join dept1 b on (a.DEPTNO = b.DEPTNO) where DNAME is null;

7369    SMITH   CLERK   20  20  
7902    FORD    ANALYST 20  20  

select empno,ename,job,a.deptno,a.DEPTNO,DNAME from emp1 a left join dept1 b on (a.DEPTNO = b.DEPTNO) where DNAME != 'ACCOUNTING';

7698 布莱克经理 30 30 销售

于 2018-09-24T19:59:32.437 回答