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。抱歉这个愚蠢的问题,我需要为一项任务做这件事。无法弄清楚。
答案 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)
;
不确定您是否将其用于练习或现实生活场景,但引入子查询可以显着增加脚本执行的时间。