【问题标题】:Need a Query ( u can use cross join there) [closed]需要一个查询(您可以使用交叉加入他们的)[关闭]
【发布时间】:2018-04-15 14:17:32
【问题描述】:

这里的表名是cricket,列是team

team
----
IND
BAN
PAK
SRI

我需要一个可以显示如下结果的查询:(见下表)

team_a  team_b
------  ------
IND      BAN
IND      PAK
IND      SRI
BAN      PAK
BAN      SRI
PAK      SRI

谁能帮我解决这个问题?

【问题讨论】:

  • 你试过查询了吗?
  • 标题说明了您需要的一切。去做吧。
  • @Tim Biegeleisen ,是的,但我得到了这个“ORA-01436: CONNECT BY loop in user data”作为错误。

标签: sql oracle plsql


【解决方案1】:

您需要在表上使用带有自连接的 CROSS JOIN。

select a.team as team_a
       , b.team as team_b
from cricket a
     cross join cricket b
where a.team != b.team 
/

诀窍是 WHERE 子句,它阻止加入同一个团队,因为显然 IND 不能玩 IND。

如果您不想生成相互匹配的配对,则将 WHERE 条件更改为使用小于而不是相等:

select a.team as team_a
       , b.team as team_b
from cricket a
     cross join cricket b
where a.team < b.team 
/

这里是a SQL Fiddle demo

【讨论】:

  • 不,这不会发生,它给了我 12 行,而我只需要 6 行。
  • 抱歉,我以为您正在尝试生成“主客场”匹配项。您决定一个团队是 TEAM_A 还是 TEAM_B 的规则是什么?
  • 不知道,其实是面试题,顺便谢谢,我已经知道答案了。
  • @APC :我当然喜欢这个问题......和游戏 - 这就像印度的一种宗教。我出于其他原因拒绝了这个提议...... :-)
  • @KaushikNayak - 好的,你拒绝了他们的提议,他们拒绝了我的这个问题;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2019-03-02
相关资源
最近更新 更多