如何将此WHERE查询转换为Oracle SQL中的SubQuery?

时间:2014-10-01 15:28:46

标签: sql oracle 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 = '612'
;

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

编辑:使用Oracle。抱歉这个愚蠢的问题,我需要为一项任务做这件事。无法弄清楚。

2 个答案:

答案 0 :(得分:0)

我相信你所寻找的不是子查询,而是重写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子句中的区号相匹配。

答案 1 :(得分:0)

您可以更改最后一部分以获得子查询(我将使用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)
;

不确定您是否将其用于练习或现实生活场景,但引入子查询可以显着增加脚本执行的时间。