2016-12-05 105 views
0

我想知道是否(以及如何?)我可以使用查询的结果集作为另一个查询中的WHERE子句的输入。使用SQL查询的结果作为WHERE子句的输入

例如,我有一个查询获取“代码”列表,我想SELECT所有来自另一个表的元组都具有 - 作为“代码”值 - 以前获取的元素之一。

我使用JDBC,所以我想知道我是否需要使用一些Java编程或如果我可以直接使用SQL。

回答

0

当然是可以

试试这个例如

SELECT f1 , f2 , f3 , etc 
    FROM table1 
    WHERE f1 IN (SELECT field1 FROM table2) 
+3

这仅适用于如果'table2'只有1个记录 –

+0

尝试F1在(选择场FROM表2) –

+0

我知道,(否则我会没有发布我的评论),你可能想考虑**编辑**你的答案,而不是评论。 –

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

什么在我看来是更好的语法。

0

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' 
) 
+1

Oracle支持这样的语法:“select(c1,c2,c3)in select c1,c2,c3 form t2',所以你可以用'in'做多列。但是'join'更具可读性 – Kacper