gpt4 book ai didi

sql - 外连接的固定条件

转载 作者:行者123 更新时间:2023-12-04 18:20:46 26 4
gpt4 key购买 nike

这不是一个真实的例子,它一直困扰着我一段时间,我非常感谢任何能解释这种行为的人。

我有这两张 table

MYTABLE1
ID TYPE NAME
1 1 typea
2 2 typea
3 3 typea
4 4 typeb
5 5 typeb
6 6 typeb
7 7 typec
8 8 typec
9 9 typec
10 10 typed

MYTYPE
ID NAME DESCRIPTION
1 typea typea with desc
2 typea
3 typea TYPE
4 typeb typeb with desc
5 typeb
6 typeb TYPE
7 typec typec with desc
8 typec
9 typec TYPE

我想要一个从两个表(mytable1 a,mytype b)返回行的 sql,其中

a) MYTABLE1.type = MYTYPE.ID 和 MYTYPE.description='TYPE'

b) MYTABLE1.type 不在 MYTYPE.id 中
a.id    a.type  a.name  b.id    b.name  b.description
3 3 typea 3 typea TYPE
6 6 typeb 6 typeb TYPE
9 9 typec 9 typec TYPE
10 10 typed null null null

我已经尝试过这种说法,但没有成功。我想要一个使用外连接,而不是联合或嵌套选择的解决方案。

例如,我使用 Oracle 外连接语法,但我认为可以通过使用标准语法并将条件 a) 放在 ON 子句中或 b) 放在 where 子句中来实现相同的结果

我想要了解他们的“奇怪”行为,并尝试找到适用于所提供示例的行为。
对我来说最奇怪的是 SQL2。我不是在写查询结果,以使问题更短,但如果需要,我可以提供它们。

SQL1
select * 
from
mytable1 a,
mytype b
where
a.type=b.id(+)
and b.description ='TYPE'
order by a.id

SQL2
select * 
from
mytable1 a,
mytype b
where
a.type=b.id(+)
and b.description(+) ='TYPE'
order by a.id

SQL3
select * 
from
mytable1 a,
mytype b
where
a.type=b.id(+)
and (b.description ='TYPE' or b.description is null)
order by a.id

提前致谢,

最佳答案

停止使用旧的笛卡尔积语法。 JOIN语法是 ANSI-92 标准。 20年应该足够被认为是稳定的......

SELECT
*
FROM
myTable1 a
LEFT JOIN
myType b
ON b.id = a.type
WHERE
b.description = 'TYPE'
OR b.id IS NULL

注意:我确实有 b.description IS NULL但是,据我所知,ORACLE 将长度为 0 的字符串视为 NULL。因此最好测试 id No Join 情况下的字段。

关于sql - 外连接的固定条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com