2010-05-13 51 views
1

我有以下查詢:基本的SQL查詢的問題

SELECT  
    Base.ReportDate, 
    Base.PropertyCode, 
    Base.FirstName, 
    Base.MiddleName, 
    Base.LastName, 
    Person.FirstName, 
    Person.MiddleName, 
    Person.LastName 
FROM LeaseT INNER JOIN 
    Base ON LeaseT.LeaseID = Base.LeaseID INNER JOIN 
    Person ON LeaseT.TenantID = Person.ID 

工作正常,但有可能在「人」表基表的每個記錄是0到「N」的人,但只有我想要爲每個'基本'記錄準確地返回1(哪個不重要,但具有最低Person.ID的記錄)是合理的選擇。如果person表中有0行,我仍然需要返回該行,但'person'字段的值爲空。

我該如何構建SQL來做到這一點?

謝謝。

編輯:是的,這些表格可能結構不正確,但此時重組是不可能的 - 必須配合現有的功能。

+1

什麼數據庫?這是'最大的組',除了最大值你想要的最小值。 – 2010-05-13 18:12:43

+0

sql server 2005 – user318573 2010-05-13 18:13:56

+0

你究竟想要做什麼,只是從每個基地返回一個隨機人員?你現在擁有這種方式,我認爲無論你做什麼,因爲人字段都在選擇中,所以它會返回每一個人。 – ryanulit 2010-05-13 18:17:07

回答

3

工作的呢?

SELECT  
    Base.ReportDate, 
    Base.PropertyCode, 
    Base.FirstName, 
    Base.MiddleName, 
    Base.LastName, 
    Person.FirstName, 
    Person.MiddleName, 
    Person.LastName 
FROM Base 
LEFT JOIN (
    SELECT LeaseID, MIN(TenantID) AS [TenantID] 
    FROM LeaseT 
    GROUP BY LeaseID) AS [LeaseT_SinglePerson] ON Base.LeaseID = [LeaseT_SinglePerson].LeaseID 
LEFT JOIN Person ON [LeaseT_SinglePerson].TenantID = Person.ID 
3

下面可能對你有幫助

SELECT  
    Base.ReportDate, 
    Base.PropertyCode, 
    Base.FirstName, 
    Base.MiddleName, 
    Base.LastName, 
    d.FirstName, ou 

    d.MiddleName, 
    d.LastName 
FROM LeaseT INNER JOIN 
    Base ON LeaseT.LeaseID = Base.LeaseID INNER JOIN 
left outer join 
(select min(personid) as ID from person group by personid) as d 
on 
LeaseT.TenantID = d.ID 
left outer join 
(select FirstName, 
    MiddleName, 
    LastName from person) d1 
on 
    LeaseT.TenantID = d1.ID 
+0

我想LeaseT應該是左連接的,因爲它是基礎和人之間的連接 – devio 2010-05-13 18:28:36

+0

抱歉說不過來,但我沒有讓你 – 2010-05-13 18:35:06