SQL子查询 - 为连续返回的每个“ID”执行select语句

时间:2013-07-23 14:15:04

标签: sql oracle

假设我有两个表,一个person表和一个orders表。 person表包含personID字段和name字段等。 orders表包含orderID字段等。我想返回有关一个或多个人的信息,但除此之外,我想使用personID查询要在每行中返回的其他信息。例如:

personID    name    +    orderID
  120       John           5000

我现在的查询如下:

SELECT p.personID, p.name
FROM person p
WHERE p.name = "John"

我想返回一个匹配该名称查询的人员列表,但是对于每个结果,还要使用personID查找属于两个日期的特定订单(一个订单),检查“活动”标记,等,或者如果该顺序不存在,则为orderID返回null。

2 个答案:

答案 0 :(得分:6)

假设指定的在给定日期和旗帜之间只有1 订单

SELECT p.personID, p.name, (Select OrderId From Orders o Where o.PersonId = p.personID and o.Date Between Value1 And Value2 And o.FlagColumn = 'Active') As OrderId
FROM Person p
WHERE p.name = "John"

你也可以为此JOIN

SELECT p.personID, p.name, o.OrderId
FROM Person p
JOIN Orders o On p.PersonId = o.PersonId
WHERE p.name = "John" And
      o.Date Between Value1 And Value2 And 
      o.FlagColumn = 'Active'

答案 1 :(得分:1)

试试这个

Select p.* 
From Person p
JOIN Orders o 
     ON p.PersonID = o.PersonID AND 
     (o.OrderDate BETWEEN '2013-07-01' AND '2013-07-30') AND
     (o.IsActive = 1)
WHERE p.Name = 'John'
相关问题