Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不匹配列数据上的联接表_Sql_Oracle_Join - Fatal编程技术网

Sql 不匹配列数据上的联接表

Sql 不匹配列数据上的联接表,sql,oracle,join,Sql,Oracle,Join,我有两个表个人和账户。表中包含如下记录: 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' 人 ---------------------------------------- Slno Name Phone Acc_type ---------

我有两个表个人账户。表中包含如下记录:

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'

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

----------------------------------------
Acc_type    Acc_Desc
----------------------------------------
35001       Regular  
35002       non-Regular
我正在尝试根据Slno获取记录详细信息,该键是主键。我写了如下质疑:

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'
对于上面的查询,我得到以下输出

-----------------------------------------------------
Slno     Name      Phone       Acc_type    Acc_Desc
-----------------------------------------------------
2       Mia       332332      35001        Regular
但科目表中有Acc_类型,为Slno 1提供,但没有记录。 我需要按如下方式获取输出,这可能吗

-----------------------------------------------------
Slno     Name      Phone       Acc_type    Acc_Desc
-----------------------------------------------------
1       Robert    211211      0

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

尝试左/右连接。下面是它的工作原理

编辑表格的cuz:

在您的情况下,它将如下所示:

 
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

帐户表中没有帐户类型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
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;
SELECT P.*,
       A.Acc_Desc
FROM   Person p
       LEFT OUTER JOIN
       Account a
       ON  (p.acc_type = a.acc_type )
| Slno |   Name |  Phone | Acc_type | Acc_Desc |
|------|--------|--------|----------|----------|
|    2 |    Mia | 332332 |    35001 |  Regular |
|    1 | Robert | 211211 |        0 |   (null) |
查询1

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;
SELECT P.*,
       A.Acc_Desc
FROM   Person p
       LEFT OUTER JOIN
       Account a
       ON  (p.acc_type = a.acc_type )
| Slno |   Name |  Phone | Acc_type | Acc_Desc |
|------|--------|--------|----------|----------|
|    2 |    Mia | 332332 |    35001 |  Regular |
|    1 | Robert | 211211 |        0 |   (null) |

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;
SELECT P.*,
       A.Acc_Desc
FROM   Person p
       LEFT OUTER JOIN
       Account a
       ON  (p.acc_type = a.acc_type )
| Slno |   Name |  Phone | Acc_type | Acc_Desc |
|------|--------|--------|----------|----------|
|    2 |    Mia | 332332 |    35001 |  Regular |
|    1 | Robert | 211211 |        0 |   (null) |

你需要两行吗??不,基于SLNO通过“代码> > ACCyType=0</CODE”不是在<代码>帐号 TabeCalrRT中,但是我以前已经在AcjyType表中输入了一些ActhType 0的记录。<代码> ACCyType=0 意味着什么?这应该是一个注释。这是一个外部连接,所以它将考虑所有元组。外部联接用于查找其他表中可能不匹配的记录。因此,您必须指定允许联接的哪一侧有丢失的记录。在这种情况下,必须出现Acc_Desc,该名称出现在第二个表中。因此,我们使用右外连接。