【问题标题】:How can write this query in sql?如何在sql中编写此查询?
【发布时间】:2018-07-23 10:34:48
【问题描述】:

表格:

团队(tid、tname、tcolor、预算)

PLAYERS(pid, pname, age, country)

PLAYS(pid, tid, season, value)

-(pid 对 PLAYERS 表中 pid 的引用)

-(tid 对 TEAMS 表中 tid 的引用)

WINS(wtid, ltid, season, wcore, lscore)

-(wtid (winner) 和 ltid (loser) 引用 TEAMS 表中的 tid)

--

我必须为此编写查询:(我尝试使用“不存在”和“不在”但无法做到。)

查找与所有球队一起比赛的球队。

【问题讨论】:

  • 1) 请展示您的尝试,即使它不起作用。然后我们知道您确实尝试过。 2) 请说明您的数据库的结构。 3)您向我们展示了一些字段,但没有解释查询的输出应该是什么(即规则是什么,应该/不应该包括什么,以及标准是什么)。理想情况下,向我们展示一些示例源数据以及他们查询输出的示例将基于该源数据。目前,仅考虑到您在上面写的内容,无法正确回答您的问题。

标签: mysql sql database search


【解决方案1】:

这样就可以了:

SELECT team
FROM (
    SELECT tid team, WINS.ltid otherteam
    FROM TEAMS
    LEFT JOIN WINS ON WINS.wtid = tid
    UNION ALL 
    SELECT tid team, LOSE.wtid otherteam
    FROM TEAMS
    LEFT JOIN WINS LOSE ON LOSE.ltid = tid
)
GROUP BY team
HAVING COUNT(DISTINCT otherteam) >= (SELECT COUNT(tid)-1 AS teamcount FROM TEAMS)otherteams

【讨论】:

  • MySql Workbench 在尝试执行该查询后崩溃了 2 次。所以它没有用。我不知道为什么。
  • @yasin 如果您需要更多帮助,您必须编辑您的问题,正如我在上面的评论中提到的那样
  • 奇怪。尝试将内部查询的结果放入临时表中,然后将外部选择应用于临时表。这可能有效。
  • 或者使内部查询成为视图并在视图上使用外部选择。对我来说效果很好。
【解决方案2】:

这对我有用。

SELECT 
     t1.tid
FROM
     teams t1
WHERE
     NOT EXISTS( SELECT 
             t2.tid
         FROM
             teams t2
         WHERE
             t2.tid NOT IN (SELECT 
                     wtid
                 FROM
                     wins
                 WHERE
                     ltid = t1.tid UNION (SELECT 
                     ltid
                 FROM
                     wins
                 WHERE
                     wtid = t1.tid)) AND t1.tid != t2.tid)

【讨论】:

    猜你喜欢
    • 2015-08-14
    • 2013-01-17
    • 2013-02-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多