2

personテーブルとテーブルの 2 つのテーブルがあるとしordersます。personテーブルには、とりわけpersonID、フィールドとフィールドが含まれます。テーブルには、特にフィールドが含まれていnameます。1 人以上の人物に関する情報を返したいのですが、それに加えて、personID を使用して追加情報をクエリし、各行で返されるようにしたいと考えています。例えば:ordersorderID

personID    name    +    orderID
  120       John           5000

現在の私のクエリは次のとおりです。

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

その名前のクエリに一致する人のリストを返したいのですが、結果ごとに personID を使用して、2 つの日付の間に該当する特定の注文 (1 つの注文) を検索し、「アクティブ」フラグがチェックされているなど、またはその注文が存在しない場合は、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 に答える