加入关于不匹配列数据的表

时间:2016-04-13 06:18:51

标签: sql oracle join

我有两个表帐户。和表包含如下记录,

Field<?> myAliasedField = field(name("a", "my_field"), String.class);

帐户

----------------------------------------
Slno     Name      Phone       Acc_type
----------------------------------------
1       Robert    211211      0
2       Mia       332332      35001

我尝试根据 Slno 获取记录详细信息whick是主键。我写了如下查询,

----------------------------------------
Acc_type    Acc_Desc
----------------------------------------
35001       Regular  
35002       non-Regular

对于上述查询我得到以下输出

Select P.Slno,P.Name,P.Phone,P.Acc_type,A.Acc_Desc 
From   Person P
Join   Account A
On     A.Acc_type = P.Acc_type
Where  P.Slno = '2'

但是Account表中的Acc_type是为 Slno 1 而给出的,但没有记录。 我需要按如下方式获取输出,这是可能的

-----------------------------------------------------
Slno     Name      Phone       Acc_type    Acc_Desc
-----------------------------------------------------
2       Mia       332332      35001        Regular

查询中的哪些字符将使此输出成为可能。

4 个答案:

答案 0 :(得分:0)

SELECT P.Slno,P.Name,P.Phone,P.Acc_type,A.Acc_Desc
FROM Person P 
RIGHT OUTER JOIN Account A ON A.Acc_type = P.Acc_type

答案 1 :(得分:0)

SQL Fiddle

Oracle 11g设置

CREATE TABLE Person (
  Slno INT,
  Name VARCHAR2(20),
  Phone INT,
  Acc_type INT
);

INSERT INTO Person
SELECT 1, 'Robert', 211211, 0 FROM DUAL UNION ALL
SELECT 2, 'Mia',    332332, 35001 FROM DUAL;

CREATE TABLE Account (
  Acc_type INT,
  Acc_Desc VARCHAR2(20)
);

INSERT INTO Account
SELECT 35001, 'Regular' FROM DUAL UNION ALL
SELECT 35002, 'non-Regular'FROM DUAL;

查询1

SELECT P.*,
       A.Acc_Desc
FROM   Person p
       LEFT OUTER JOIN
       Account a
       ON  (p.acc_type = a.acc_type )

<强> Results

| Slno |   Name |  Phone | Acc_type | Acc_Desc |
|------|--------|--------|----------|----------|
|    2 |    Mia | 332332 |    35001 |  Regular |
|    1 | Robert | 211211 |        0 |   (null) |

答案 2 :(得分:-1)

尝试左/右连接。以下是它的工作原理http://www.w3schools.com/sql/sql_join_left.asp

编辑形式:

在你的情况下,它看起来像这样:

 
Select P.Slno,P.Name,P.Phone,P.Acc_type,A.Acc_Desc 
From   Person P
Left Join   Account A
On     A.Acc_type = P.Acc_type

答案 3 :(得分:-1)

帐户表中没有帐户类型0,因此联接会将其过滤掉。