2014-10-01 60 views
-6
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子句中的子查詢返回相同的數據。請幫我重新格式化它。我不明白如何。謝謝。如何將此WHERE查詢轉換爲Oracle SQL中的子查詢?

編輯:使用Oracle。對於這個愚蠢的問題抱歉,我需要做一個任務。無法弄清楚。

+1

你正在使用哪些DBMS? Mysql,oracle或sql服務器?他們不一樣。爲什麼你特別想使用子查詢? – 2014-10-01 15:30:24

+0

不建議避免使用子查詢,向我們描述你想要的,我們將找到最合適的解決方案,而無需使用子查詢(如果可能) – 2014-10-01 15:32:25

+0

你想做什麼,你相信子查詢會爲你做?你在找什麼結果? – JNevill 2014-10-01 15:32:26

回答

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) 
; 

不知道,如果你正在使用它的實踐,或實生活場景,但引入子查詢可以顯着增加腳本執行的時間。

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子句中的區號進行匹配。

+0

第一條語句與問題中的相同,只是使用舊的語法而不是ANSI連接? – 2014-10-01 16:35:19

+0

同樣,問題還不清楚。我不希望所有OP真正需要做的事情是在重寫where子句的同時進行相同的查詢。 – AdamMc331 2014-10-01 16:36:12

+0

我明白了,儘管他們明確表示他們需要一個子查詢來完成他們的任務。 2014-10-01 16:39:07