gpt4 book ai didi

sql - ORACLE 中的 "less than"用于两个 varchars?

转载 作者:行者123 更新时间:2023-12-01 10:56:38 24 4
gpt4 key购买 nike

我有一道作业题:

Find the celebs that have been in relationship with the same celeb. 
The result should be (celeb1, celeb2, celeb3) triples,
meaning that celeb1 and celeb2 have been in relationship with celeb3.

现在“Relationships”表有 celeb1 和 celeb2 字段..其中的值是一个 VARCHAR。

我的解决方案是:

  CREATE VIEW Celeb1Rels AS
SELECT celeb1 AS c1, celeb2 AS c2 FROM relationships;

CREATE VIEW Celeb2Rels AS
SELECT celeb1 AS c2, celeb2 AS c3 FROM relationships;

SELECT * FROM Celeb1Rels NATURAL JOIN Celeb2Rels;

而且效果很好。然而,讲师发布了他的解决方案,他有:

SELECT X.celeb1, Y.celeb1, X.celeb2
FROM Relationships X, Relationships Y
WHERE X.celeb2=Y.celeb2 AND X.celeb1<Y.celeb1;

我不明白他为什么用 X.celeb1 < Y.celeb1它确实有效并提供了正确的输出,但我认为“<”用于比较数字?

谁能解释一下“<”在这种情况下的作用?以及比较 VARCHARS 时它的行为如何?

最佳答案

这样你就不会得到重复的关系,例如 celeb1 和 celeb2 之间的 2 个假设关系,以及 celeb1 和 celeb3,你想要结果

celeb2, celeb3, celeb1

您需要第二个不等运算符来确保表不会连接到相同的关系(即 celeb1 和 Celeb2 连接回 celeb1 和 celeb2)。如果您要使用您的讲师查询并修改它而不是 <你要使用不等于 <>不过,您会得到结果:

celeb2, celeb3, celeb1
celeb3, celeb2, celeb1

但这些行显示相同的内容但顺序不同,>不等运算符只是确保第 2 列始终是第 1 列之后按字母顺序排列的名称。

总结一下>运算符应用于 varchars 时按字母顺序工作,因此 'a' < 'b' , 'abc' > 'aaa'

关于sql - ORACLE 中的 "less than"用于两个 varchars?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14854267/

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