请找出下面的问题,并确认相同的。
步骤01:根据连接条件,从表和填充中获取值。由于表b中没有匹配的值,所有列都将填充null值。
列:b.op\u type,b.demo\u 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条件的相同select查询将给出与预期相同的结果。
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、 操作类型!='这是包含b.op_类型的条件为空的地方
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条答案
按热度按时间9w11ddsr1#
到目前为止,您描述的内容与sql的行为并不矛盾。重要的是null表示没有值。所以呢
FOO != 'B'
与何处不匹配FOO
是NULL
.您尚未提供的示例数据
TBL_PLN_PRO_DIV_SDIV
以及TBL_MS_TARGET_GROUP11
所以在这里很难有明确的帮助。如果查询没有返回行
A_OP_TYPE != 'D'
我同意有些事情不对,因为你已经证明了A_OP_TYPE='U'
(即。!= 'D'
). 但是,如果你没有来自TBL_MS_TARGET_GROUP11
其中OP_TYPE
值不是D
,你找不到匹配的。cdmah0mi2#
员工表:
从emp1中选择empno、ename、job、deptno;
7839国王总裁10 7698布莱克经理30 7902福特分析师20 7369史密斯职员20
从dept1中选择*;
10会计纽约30销售芝加哥
不带任何where条件的左连接:
7698 blake经理30 30销售