如何写正确的两个表的左联接?

问题描述

我想连接两个表,第一个表主键数据类型是数字,第二个表主键数据类型是VARCHAR2(30 BYTE)。如何连接两个表。

我尝试了这段代码,但是第二个表的所有值都为空。为什么呢?

SELECT a.act_phone_no,a.act_actdevice,a.bi_account_id,a.packag_start_date,c.identification_number,FROM ACTIVATIONS_POP a
left JOIN customer c
on TO_CHAR(a.act_phone_no) = c.msisdn_voice

第一张桌子

act_phone_no   bi_account_id
23434             45345
34245             43556    

第二张表

msisdn_voice    identification_number
23434              321113
34245              6547657

解决方法

您似乎并没有告诉我们所有信息。如果这样的示例数据查询 works (如果写得正确):

file.watch()

可能是什么问题?谁知道。如果您得到 some 结果,但是SQL> with 2 -- Sample data 3 activations_pop (act_phone_no,bi_account_id) as 4 (select 23434,45345 from dual union all 5 select 34245,43556 from dual 6 ),7 customer (msisdn_voice,identification_number) as 8 (select '23434',321113 from dual union all 9 select '34245',6547657 from dual 10 ) 11 -- query works OK 12 select a.act_phone_no,13 a.bi_account_id,14 c.identification_number 15 from activations_pop a join customer c on to_char(a.act_phone_no) = c.msisdn_voice; ACT_PHONE_NO BI_ACCOUNT_ID IDENTIFICATION_NUMBER ------------ ------------- --------------------- 23434 45345 321113 34245 43556 6547657 SQL> 表中的列为空(CUSTOMER?),则它们实际上可能是NULL,或者您没有管理连接那些列上的行(用空格左/右填充?)。是否参加例如

NULL

on to_char(a.act_phone_no) = trim(c.msisdn_voice)

帮助?

考虑发布适当的测试用例(on a.act_phone_no = to_number(c.msisdn_voice) CREATE TABLE语句)。

,

您正在使用Oracle吗?

请查看下面的演示

SELECT a.act_phone_no,a.bi_account_id,c.identification_number
FROM ACTIVATIONS_POP a
left JOIN customer c
on TO_CHAR(a.act_phone_no) = c.msisdn_voice;

SQLFiddle