2013-07-23 40 views
1

假設我有兩個表,一個person表和一個orders表。 person表包括personID字段和name字段等。 orders表包含orderID字段等。我想返回關於一個或多個人的信息,但除此之外,我想使用personID來查詢其他信息,以便在每行中返回。例如:SQL子查詢 - 對每個「ID」行執行select語句

personID name + orderID 
    120  John   5000 

我的查詢現在如下:

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

我想回國的人該名稱匹配的查詢列表,但對於每一個結果,還可以使用PERSONID看建立一個落在兩個日期之間的特定訂單(一個訂單),檢查了一個「活動」標誌等,或者如果該訂單不存在,則爲orderID返回一個空值。

+0

Person和Order表如何關聯。我的意思是什麼是外鍵? – Learner

+0

如果約翰在提交的日期範圍內有多個訂單,會發生什麼情況? –

+0

Person表中的主鍵是'personID'。 'personID'也是訂單表中的外鍵。 –

回答

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' 
+0

我在你使用的第一個例子(子查詢)上使用了一個變體,它的工作非常好。謝謝! –

+0

很高興知道@BigMario。乾杯! – Learner

+0

FYI http://stackoverflow.com/a/1233926/3299397 –

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'