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,该名称出现在第二个表中。因此,我们使用右外连接。