2

假设我有两张桌子,一张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。

4

2 回答 2

10

假设指定的在给定的日期和标志之间只有 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'
于 2013-07-23T14:25:55.710 回答
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'
于 2013-07-23T14:25:49.763 回答