如何使用子查询结果进行另一个sql选择?

时间:2016-08-31 13:22:48

标签: sql postgresql

我想使用sql查询的结果,并根据结果发送另一个查询。

Exmaple(当然真正的实时查询更复杂):

table1: name, age
table2: name, age, field1, fieldN

首先查询:

select name, age from table1 where age > 18.

现在,我想查找table2中与第一个查询的多个结果字段匹配的所有条目。

重要提示:我想检索匹配所在的table2的完整行。

但是怎么样?

4 个答案:

答案 0 :(得分:0)

基于MS sql server的查询构建

select t1.* 
from table1 as t1
join table2 as t2 on t1.name=t2.name and t1.age=t2.age
where t2.age > 18

答案 1 :(得分:0)

如果您想根据匹配的列名自动加入,那么您可以使用NATURAL JOIN

WITH query1 AS (
    SELECT age, name FROM table1 WHERE age > 18
)
SELECT age, name, t2.field1, t2.fieldN
FROM table2 t2 NATURAL JOIN query1;

现在,虽然通常不建议使用NATURAL JOIN,因为它非常弱,因为使用它的查询很容易因架构更改而制动,对于手动即席查询或查询(例如查询)可能没问题以上,您可以使用显式列。在任何一种情况下,我建议反对它并使用公共连接样式:

WITH query1 AS (
    SELECT age, name FROM table1 WHERE age > 18
)
SELECT t2.age, t2.name, t2.field1, t2.fieldN
FROM table2 t2 JOIN query1 q1 ON t2.age = q1.age AND t2.name = t1.name;

答案 2 :(得分:0)

现在我想:

  • 找到
  • 来自table2的所有条目
  • 匹配多个结果字段
  • 的第一个查询
Microsoft.Office.Interop.Outlook.PropertyAccessor pa = addr.PropertyAccessor;
smtpAddress = pa.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39FE001E").ToString();

答案 3 :(得分:0)

实际上这就是我想要的,但感谢您的帮助:

select * from table2 where (name, age) IN (
    select name, age from table1 where age > 18
)