【问题标题】:how would you formulate this sql query? [closed]你将如何制定这个 sql 查询? [关闭]
【发布时间】:2016-03-11 13:29:03
【问题描述】:

我一直在尝试解决 sql 查询?

列出那些有分支机构但没有在该州下订单的客户的州?

编辑

SELECT branchnumber
  FROM BRANCH
MINUS
SELECT branchnumber
  FROM branch b,
       orders o,
       customer c,
       employee e
  WHERE o.salesperson = e.employeeid AND
        b.branchnumber = e.empbranch AND
        c.customerid = o.customerid AND
        branchstate != c.custstate

表格:https://www.sendspace.com/file/2kfasd

【问题讨论】:

  • 你试过什么?发布您编写的查询。也请看看这个 - stackoverflow.com/help/mcve,了解如何发布一个最小、完整和可验证的示例,以便其他人可以帮助您。
  • SELECT branchnumber FROM BRANCH MINUS SELECT branchnumber FROM branch b, orders o, customer c, employee e WHERE o.salesperson = e.employeeid AND b.branchnumber = e.empbranch AND c.customerid = o。 customerid AND branchstate != c.custstate
  • @helpmesql - 不要使用 cmets 向问题添加信息。您应该编辑您的问题(标签下方有一个edit 按钮)。这次我做到了。另外 - 不要发布指向重要信息的链接 - 将这些信息放在问题中。没有任何人会下载您的文件。祝你好运。

标签: sql oracle schema


【解决方案1】:

我在猜测您的表结构,因为我不会从某个文件共享网站下载来源不明的文件,但这是一个粗略的猜测:

SELECT DISTINCT BRANCHSTATE AS STATE
  FROM BRANCH
MINUS
SELECT DISTINCT c.CUSTSTATE AS STATE
  FROM CUSTOMER c
  INNER JOIN ORDERS o
    ON o.CUSTOMERID = c.CUSTOMERID

祝你好运。

【讨论】:

  • 不要认为查询可以这么简单地表达。如果 branch1 和 branch2 都在纽约,并且 branch2 在纽约有客户但 branch1 没有 - 那么我认为 NY 应该按照原始规范返回。
  • 第一个子查询返回所有有分支的状态。第二个查询返回下订单的客户居住的所有州。 Query1 减去 query2 返回那些有分支机构但没有客户下订单的州,这是我们想要的。
  • 啊,你说得对 - 我会(太快)把它读成“列出所有有分支机构但没有客户的州”,显然它是“列出所有有分支机构的州和没有客户”。我最初的解释受到在 OP 示例查询的 pt 2 中包含 BRANCHES 表的影响;让我相信 OP 的目标是更复杂的东西。
【解决方案2】:

似乎你想要一个 WHERE NOT EXISTS 而不是 MINUS。

SELECT DISTINCT B1.BRANCHSTATE
FROM BRANCH b1
WHERE NOT EXISTS
(SELECT 'X'
  FROM branch b2,
       orders o,
       customer c,
       employee e
  WHERE o.salesperson = e.employeeid AND
        b2.branchnumber = e.empbranch AND
        c.customerid = o.customerid AND
        b1.branchstate = c.custstate)

编辑 - 您的示例 SQL 正在提取 BRANCHNAME,但我看到您的问题是要求具有此类分支的状态,因此进行了修改以提取不同的状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多