【问题标题】:How do I turn this WHERE Query into a SubQuery in Oracle SQL? [closed]如何将此 WHERE 查询转换为 Oracle SQL 中的子查询? [关闭]
【发布时间】:2014-11-26 12:04:45
【问题描述】:
SELECT a.CLIENTID,
       a.CLIENTNAME,
       a.CREATEDATE,
       b.AREACODE,
       b.PHONENUMBER    
FROM CLIENT a
INNER JOIN PHONE b ON a.CLIENTID = b.CLIENTID
WHERE b.AREACODE = '612'
;

此代码返回我要查找的内容。但是,我希望查询使用 WHERE 子句中的子查询返回相同的数据。请帮我重新格式化。我不明白怎么做。谢谢。

编辑:使用 Oracle。对不起这个愚蠢的问题,我需要做一个任务。想不通。

【问题讨论】:

  • 您使用的是什么 DBMS? Mysql,oracle还是sql server?她们不一样。为什么你特别想使用子查询?
  • 几乎不建议避免使用子查询,向我们描述您想要的,我们会找到最合适的解决方案而无需使用子查询(如果可能的话)
  • 你想做什么,你相信子查询会为你做什么?您在寻找什么结果?

标签: sql oracle where


【解决方案1】:

我相信您要查找的不是子查询,而是在 WHERE 子句中重写 JOIN。也许你想这样做?:

SELECT a.CLIENTID, a.CLIENTNAME, a.CREATEDATE, b.AREACODE, b.PHONENUMBER
FROM CLIENT a, PHONE b
WHERE a.CLIENTID = b.CLIENTID AND b.AREACODE = '612'

您的问题不清楚这是否正确,但这是在重写 WHERE 子句时完成相同任务的一种方法。

编辑

这假设您实际上想要使用值“612”。如果您希望能够使用任何值,则可以保留 JOIN 并编写以下代码:

SELECT a.CLIENTID, a.CLIENTNAME, a.CREATEDATE, b.AREACODE, b.PHONENUMBER
FROM CLIENT a
JOIN PHONE b on a.CLIENTID = b.CLIENTID
WHERE b.AREACODE = (SELECT areacode FROM phone WHERE *some condition here* LIMIT 1);

这将返回 1 个特定的区号,它与您需要的任何条件相匹配。您可以将其与 where 子句中的区号匹配。

【讨论】:

  • 第一个语句与问题中的相同,只是使用旧语法而不是ANSI连接?
  • 再次,问题不清楚。我放弃了所有 OP 真正需要做的就是在重写 where 子句时进行相同的查询的机会。
  • 我明白了,尽管他们明确表示他们需要一个子查询来分配他们的任务。
  • 是的,我知道你来自哪里。这不是我给过的最好的答案,但为什么不在黑暗中试一试呢。我什至不知道第二个答案是否符合他们的要求。说他们需要 where 子句中的子查询几乎是你能得到的一样广泛。
  • 是的,没有参数 *8-)
【解决方案2】:

您可以将最后一部分更改为具有子查询(我将使用in,因此您可以在WHERE 子句中拥有多个值)

SELECT a.CLIENTID,
       a.CLIENTNAME,
       a.CREATEDATE,
       b.AREACODE,
       b.PHONENUMBER    
FROM CLIENT a
INNER JOIN PHONE b ON a.CLIENTID = b.CLIENTID
WHERE b.AREACODE IN 
    /* You can put your query inside the ()s */
    (SELECT TOP 10 AREACODE FROM PHONE)
;

不确定您是在练习还是在现实生活场景中使用它,但引入子查询会显着增加脚本执行所需的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多