任何人都可以告诉我下面的2个查询是左外连接还是右外连接的例子?
Table Part:
Name Null? Type
PART_ID NOT NULL VARCHAR2(4)
SUPPLIER_ID VARCHAR2(4)
PART_ID SUPPLIER_ID
P1 S1
P2 S2
P3
P4
Table Supplier:
Name Null? Type
SUPPLIER_ID NOT NULL VARCHAR2(4)
SUPPLIER_NAME NOT NULL VARCHAR2(20)
SUPPLIER_ID SUPPLIER_NAME
S1 Supplier#1
S2 Supplier#2
S3 Supplier#3
Run Code Online (Sandbox Code Playgroud)
显示所有零件,无论供应商是否供货:
SELECT P.Part_Id, S.Supplier_Name FROM Part P, Supplier S WHERE P.Supplier_Id = S.Supplier_Id (+) SELECT P.Part_Id, S.Supplier_Name FROM Part P, Supplier S WHERE S.Supplier_Id (+) = P.Supplier_Id
可能重复:
Oracle:(+)在WHERE子句中做什么?
在Oracle数据库环境中考虑下面的简化SQL查询(虽然我不确定它是否特定于Oracle):
SELECT
t0.foo, t1.bar
FROM
FIRST_TABLE t0, SECOND_TABLE t1
WHERE
t0.ID (+) = t1.ID;
Run Code Online (Sandbox Code Playgroud)
(+)该WHERE条款中的符号是什么?如果这是一个无知的新手问题,我很抱歉,但是在Google或StackOverflow上搜索非常困难......因为即使使用引号,搜索引擎也会看到一个"+"符号,似乎想把它视为某种逻辑指令.
我需要模拟左连接效果而不使用"左连接"键.
我有两个表,A和B,都有id和name列.我想在两个表中选择所有dbid,其中A中的名称等于B中的名称.
我使用它来进行同步,所以在开始时B是空的(所以我将有一对来自A的id,其值为一,而来自B的id为null).后来我将有价值的夫妻 - 价值和价值 - 无效.
通常它会是:
SELECT A.id, B.id
FROM A left join B
ON A.name = B.name
Run Code Online (Sandbox Code Playgroud)
问题是我不能使用left join并想知道是否/如何做同样的事情.
多年来我一直在使用Oracle.现在我使用mysql并且在MySQL中找不到外连接的非ansi版本/速记版本.
在oracle我能做到这一点
select a.country acountry,
a.stateProvince aStateProvince,
b.countryName bcountry,
b.name bstateProvince
from User a,
stateprovince b
where a.country*=b.countryName **(+)**
and a.stateProvince*=b.name **(+)**
Run Code Online (Sandbox Code Playgroud)
获得外部联接.mysql可以做类似的事吗?
我正在将客户端的软件数据库从Oracle迁移到PostgreSQL,我在理解查询,它做了什么以及如何迁移它时遇到了一些麻烦.
查询是:
SELECT *
FROM TBL1, TBL2, TBL3, TBL4
WHERE TBL3.Project_ID = TBL1.Project_ID
AND TBL2.Type_ID = TBL1.Type_ID
AND TBL4.PROPERTY_NAME(+)='Id'
AND TBL4.Entity_ID(+)=TBL1.Entity_ID
Run Code Online (Sandbox Code Playgroud)
而我得不到的部分是'Id'上的外连接(+).表上的连接,OK,但是在字符串上?我不知道它做了什么.
有人有想法吗?谢谢.
我对 oracle sql 很陌生,刚遇到一个看起来像这样的查询
SELECT some_field
FROM some_table
WHERE some_other_field=some_value(+);
Run Code Online (Sandbox Code Playgroud)
我对代码进行了简化和 annonimized,但我很好奇最后是什么(+)。我不记得在 mssql 世界中看到过。
我在Oracle数据库中有两个表(A和G),可以根据帐号连接在一起.对此的一个警告是,其中一个表(G)的记录比另一个少约80个.当我一起查询两个表时,我需要获取所有行,以便我们在缺少的80行的列中看到NULL数据.
我目前有一个Oracle语句,它使用以下"遗留"语法执行左外连接查询:
SELECT A.AccountNo,
A.ParcelNo,
A.LocalNo,
A.PrimaryUseCode,
A.DefaultTaxDistrict,
RTRIM(G.Section),
RTRIM(G.Township),
RTRIM(g.Range)
FROM tblAcct A, tblAcctLegalLocation G
WHERE A.verstart <= '20100917999' AND A.verend > '20100917999' AND A.DefaultTaxDistrict = '2291'
AND (SUBSTR(A.AccountNo,1,1) = 'R' or SUBSTR(A.AccountNo,1,1)= 'I')
AND SUBSTR(a.ParcelNo,1,1)<> '7' and substr(a.ParcelNo,1,1)<>'8'
AND A.AcctStatusCode IN ('A', 'T', 'E')
AND A.AccountNo = G.AccountNo(+)
AND G.verstart(+) <= '20100917999' and G.verend(+) > '20100917999'
ORDER BY A.ParcelNo, A.LocalNo
Run Code Online (Sandbox Code Playgroud)
我正在尝试将此查询转换为"标准"LEFT JOIN类型查询,因为我被告知较新版本的Oracle支持此语法.我试过基本的
LEFT OUTER JOIN ON A.AccountNo = G.AccountNo
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.我的查询最多返回80行,少于全部数量.
任何人都可以告诉我我缺少什么或如何正确格式化查询?
可能重复:
Oracle"(+)"运算符
所以给了我一个带有以下内容的脚本:
SELECT BLAH
FROM A_TABLE T1, A_TABLE T2, A_TABLE T3
WHERE T2.FIELD_1(+) = T1.FIELD_1
AND T3.FIELD_1(+) = T2.FIELD_1
... etc a few more AND clauses that do that same thing
Run Code Online (Sandbox Code Playgroud)
我需要将此脚本转换为MSSQL Server,但我不知道该运算符正在做什么.这可能是某种错字吗?
查询如下
select tbl1.x, tbl2.y
from
tbl1, tbl2
where tbl1.some_column (+) = tbl2.some_column
AND tbl1.some_column2 (+) = 'Y'
Run Code Online (Sandbox Code Playgroud)
令我困惑的是这一部分
AND tbl1.some_column2 (+) = 'Y'
Run Code Online (Sandbox Code Playgroud)
这是什么意思??如果我删除(+)查询返回完全不同的行数.当=的两边都有列名时我确实理解了(+)的应用,但是当=的一边有一个字符串时,(+)做了什么?