我想知道是否(以及如何?)我可以使用查詢的結果集作爲另一個查詢中的WHERE子句的輸入。使用SQL查詢的結果作爲WHERE子句的輸入
例如,我有一個查詢獲取「代碼」列表,我想SELECT
所有來自另一個表的元組都具有 - 作爲「代碼」值 - 以前獲取的元素之一。
我使用JDBC,所以我想知道我是否需要使用一些Java編程或如果我可以直接使用SQL。
我想知道是否(以及如何?)我可以使用查詢的結果集作爲另一個查詢中的WHERE子句的輸入。使用SQL查詢的結果作爲WHERE子句的輸入
例如,我有一個查詢獲取「代碼」列表,我想SELECT
所有來自另一個表的元組都具有 - 作爲「代碼」值 - 以前獲取的元素之一。
我使用JDBC,所以我想知道我是否需要使用一些Java編程或如果我可以直接使用SQL。
當然是可以
試試這個例如
SELECT f1 , f2 , f3 , etc
FROM table1
WHERE f1 IN (SELECT field1 FROM table2)
Select * from table2 -- this is another table from your question
where code in (select code from table1); -- this is where clause that gets code from first table.
其實查詢等效於:
Select t2.* from table2 t2
inner join table1 t1 on (t1.code = t2.code);
什麼在我看來是更好的語法。
的in
關鍵詞是精細查找單碼值插入到另一臺,但多列關聯,則應該使用inner join
:
SELECT employees.name
FROM employees
INNER JOIN departments
ON employees.department = departments.department
AND employees.position = departments.position
WHERE departments.jobtitle = 'Manager'
使用in
條款按@卡茨珀的評論,而不是另一個例子不是所有的數據庫都支持這個語法:
SELECT employees.name
FROM employees
WHERE (department,position) IN
(
SELECT department,position
FROM departments
WHERE jobtitle = 'Manager'
)
Oracle支持這樣的語法:「select(c1,c2,c3)in select c1,c2,c3 form t2',所以你可以用'in'做多列。但是'join'更具可讀性 – Kacper
這僅適用於如果'table2'只有1個記錄 –
嘗試F1在(選擇場FROM表2) –
我知道,(否則我會沒有發佈我的評論),你可能想考慮**編輯**你的答案,而不是評論。 –