KSQL:条件不满足结果的情况下,左联接不等于

时间:2018-09-22 18:23:34

标签: apache-kafka confluent ksql

请找到以下问题并确认。

步骤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

相同的select查询,其中condition得到的结果与预期的相同。

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

但是当我们尝试使用不等于where条件选择时,相应的查询未给出正确的结果。 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';

2 个答案:

答案 0 :(得分:0)

到目前为止,您所描述的内容与SQL的行为并不矛盾。重要的是NULL表示没有值。因此Spark package found in SPARK_HOME: /opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/spark Launching java with spark-submit command /opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/spark/bin/spark-submit --driver-memory "2g" sparkr-shell /tmp/Rtmp1ieLNy/backend_port6f428753991 Error: sparkr.zip does not exist for R application in YARN mode. Run with --help for usage help or --verbose for debug output Error in sparkR.sparkContext(master, appName, sparkHome, sparkConfigMap, : JVM is not ready after 10 seconds FOO != 'B'FOO的地方不匹配。

您尚未提供NULLTBL_PLN_PRO_DIV_SDIV的示例数据,因此很难在这里提供明确的帮助。

如果您的查询没有返回TBL_MS_TARGET_GROUP11处的行,那么我会认为有些不对,因为您已经证明A_OP_TYPE != 'D'(即A_OP_TYPE='U'处有行)。但是,如果您没有来自!= 'D'的匹配记录,其中TBL_MS_TARGET_GROUP11的值不是OP_TYPE,那么您将找不到匹配项。

答案 1 :(得分:0)

员工表:

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

7839总统10 7698刹车管理器30 7902福特ANALYST 20 7369史密斯秘书20

从dept1中选择*;

10个纽约会计 30销售芝加哥

无任何条件的左联接:

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 BLAKE MANAGER 30 30销售