如何编写两个表的正确左连接?
Posted
技术标签:
【中文标题】如何编写两个表的正确左连接?【英文标题】:How to write correct left Join of two tables? 【发布时间】:2020-08-15 15:57:08 【问题描述】:我要连接两个表,第一个表主键数据类型是数字,第二个表主键数据类型是 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
【问题讨论】:
换个方式试试a.act_phone_no = TO_NUMBER(c.msisdn_voice)
听起来msisdn_voice 包含不可见字符。您可以使用DUMP
进行检查,例如选择 msisdn_voice, dump(msisdn_voice) from customer where msisdn_voice like '%23434%';
你为什么不给我们看一个完整的测试用例?您的 SELECT 引用的列名称未出现在您声称要显示的任何一个(未识别的)表中。一个测试用例包括创建必要表的实际 ddl,以及用最少的测试数据填充它们的实际 INSERT。
【参考方案1】:
看来你没有告诉我们一切。在这样的样本数据上查询works(如果编写正确):
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>
可能出了什么问题?谁知道。如果您得到 some 结果,但 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
和 INSERT INTO
语句)。
【讨论】:
【参考方案2】:您使用的是 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
【讨论】:
以上是关于如何编写两个表的正确左连接?的主要内容,如果未能解决你的问题,请参考以下文章
当涉及两个以上的表时,如何将来自相似字段的单个表的两个左连接转换为 LINQ? [复制]
如何在 Laravel 5.1 中编写这个(左连接、子查询)?