如何将外连接和/或运算符与下面提到的条件一起使用
表1:PERSON
ID_NO NAME
512 RAM
513 RAVI
514 RAMU
表2:FORM_DETAILS
APPL_DATE STATUS ID NO
12/09/2009 A 512
12/08/2010 A 513
12/07/2009 C 514
12/06/2006 S 513
查询
SELECT A.ID_NO,A.NAME B.APPL_DATE FROM PERSON A, FORM_DETAILS B
WHERE A.ID_NO=B.ID_NO(+) AND
B.APPL_DATE>='12/07/2009' AND
B.APPL_DATE<='12/09/2009' AND
B.STATUS='A' OR
B.STATUS='C'
ORDER BY APPL_DATE
可生产
Error: outer join operation(+) is not allowed in operand of or
任何建议都表示赞赏。
答案 0 :(得分:0)
只需将您的查询更改为(如果您希望坚持使用旧的 #color-1
{
height: 33%;
background: {{yourName}};
vertical-align: top;
background: red;
display: flex;
justify-content: center;
flex-direction: column;
}
表示法,不鼓励,因为它是特定于供应商的语法,并且已弃用):
(+)
更好,如果你想编写ANSI兼容的SQL:
SELECT A.ID_NO,
A.NAME,
B.APPL_STATUS
FROM PERSON A,
FORM_DETAILS B
WHERE A.ID_NO = B.ID_NO(+)
AND B.APPL_DATE BETWEEN '12/07/2009' AND '12/09/2009'
AND B.STATUS IN ('A', 'C')
ORDER BY APPL_DATE
答案 1 :(得分:0)
您应该使用显式联接类型而不是(+)
:
SELECT A.ID_NO,A.NAME B.APPL_STATUS
FROM PERSON A LEFT JOIN FORM_DETAILS B ON A.ID_NO=B.ID_NO
WHERE
B.APPL_DATE BETWEEN '12/07/2009' AND '12/09/2009' AND
(B.STATUS = 'A' OR
B.STATUS = 'C')
ORDER BY APPL_DATE
答案 2 :(得分:0)
而不是几十年来弃用的语法更好地使用LEFT JOIN
:
SELECT A.ID_NO,A.NAME B.APPL_STATUS FROM PERSON A
LEFT JOIN FORM_DETAILS B
ON A.ID_NO=B.ID_NO AND
B.APPL_DATE>='12/07/2009' AND
B.APPL_DATE<='12/09/2009' AND
B.STATUS='A' OR
B.STATUS='C'
ORDER BY APPL_DATE
答案 3 :(得分:0)
忘记联接的+
语法。学习使用显式join
语法。它在数据库中更容易和兼容。
你需要注意放置条件的位置。我想你想要:
SELECT P.ID_NO, P.NAME, FD.APPL_STATUS
FROM PERSON P LEFT JOIN
FORM_DETAILS FD
ON P.ID_NO = FD.ID_NO AND
FD.APPL_DATE >= DATE '2009-12-07' and DATE '2009-12-09' AND
FD.STATUS IN ('A', 'C')
ORDER BY FD.APPL_DATE;
请注意使用IN
代替OR
。我非常确定这对你要做的事情有正确的语义。