2014-04-11 148 views
0

我有兩個SQL查詢(兩者獨立工作),我嘗試要結合:合併兩個SQL查詢到一個

查詢#1:

select 
    N1."DateAndTime", 
    N0."Ration" 
from 
    (("dbo"."AnimalFeedDailyConsumption" N0 
inner join 
    "dbo"."AnimalHistoricalData" N1 on (N0."OID" = N1."OID")) 
left join 
    "dbo"."BasicAnimal" N2 on (N1."BasicAnimal" = N2."OID")) 
where 
    (N1."LactationNumber" = 4) and (N1."GCRecord" is null and (N2."Number" = 511)) 

查詢#2:

select 
    N2."Number", 
    N1."DIM", 
    N1."DateAndTime", 
    N1."LactationNumber", 
    N0."TotalYield" 
from 
    (("dbo"."DailyMilk" N0 
inner join 
    "dbo"."AnimalHistoricalData" N1 on (N0."OID" = N1."OID")) 
left join 
    "dbo"."BasicAnimal" N2 on (N1."BasicAnimal" = N2."OID")) 
where 
    (N1."LactationNumber" = 4) and (N1."GCRecord" is null and (N2."Number" = 511)) 

我想這導致在空的 '理性':

select 
    N2."Number", 
    N1."DIM", 
    N1."DateAndTime", 
    N1."LactationNumber", 
    N0."TotalYield", 
    N3."Ration" 
from 
    (("dbo"."DailyMilk" N0 
inner join 
    "dbo"."AnimalHistoricalData" N1 on (N0."OID" = N1."OID")) 
left join 
    ("dbo"."AnimalFeedDailyConsumption" N3 
inner join 
    "dbo"."AnimalHistoricalData" N1 on (N3."OID" = N1."OID")) 
left join 
    "dbo"."BasicAnimal" N2 on (N1."BasicAnimal" = N2."OID")) 
where 
    (N1."LactationNumber" = 4) and (N1."GCRecord" is null and (N2."Number" = 511)) 

於是我想這也導致了對空「理性」:

select 
    N2."Number", 
    N1."DIM", 
    N1."DateAndTime", 
    N1."LactationNumber", 
    N0."TotalYield", 
    N3."Ration" 
from 
    (("dbo"."DailyMilk" N0 
inner join 
    "dbo"."AnimalHistoricalData" N1 on (N0."OID" = N1."OID")) 
left join 
    "dbo"."AnimalFeedDailyConsumption" N3 on (N3."OID" = N1."OID") 
left join 
    "dbo"."BasicAnimal" N2 on (N1."BasicAnimal" = N2."OID")) 
where 
    (N1."LactationNumber" = 4) and (N1."GCRecord" is null and (N2."Number" = 511)) 

回答

0

這是很難回答,因爲我不知道你的表之間的關係。在你的「工作」查詢中,你正在RIGHT表(N2)上測試條件,你用LEFT OUTER連接它是因爲它是可選的 - 也許這是正確的,但看起來不正確。

這個怎麼樣,所有的聯接轉換爲內部連接?:

select 
    N2."Number", 
    N1."DIM", 
    N1."DateAndTime", 
    N1."LactationNumber", 
    N0."TotalYield", 
    N3."Ration" 
from "dbo"."DailyMilk" N0 
inner join "dbo"."AnimalHistoricalData" N1  on N0."OID" = N1."OID" 
inner join "dbo"."AnimalFeedDailyConsumption" N3 on N3."OID" = N1."OID" 
inner join "dbo"."BasicAnimal" N2    on N1."BasicAnimal" = N2."OID" 
where N1."LactationNumber" = 4 
and N1."GCRecord" is null 
and N2."Number" = 511 

時尚點評: BTW很難(對我來說),以瞭解哪些表是N0,N1,N3 & N3。爲什麼不把它們稱爲BA,AHD,DM和AFDC?此外,太多(冗餘)大括號。

注意:由於我沒有表格或數據,因此無法對此進行測試。你如何創建一個SQLfiddle?

+0

謝謝親愛的。使用所有連接作爲內部連接,查詢不會返回錯誤,也不會返回任何數據。希望我可以創建一個SQLfiddle,但數據庫非常龐大,並不是由我創建的,我只是sql的初學者。 –

+0

那麼我提供的查詢將返回表中由連接關聯的所有內容,但是會根據WHERE條件進行過濾。因此,嘗試運行查詢時刪除了一個條件,然後刪除其中一個條件等,以查看每個條件的影響。您可以對每個表執行相同的操作(如果其中一個連接不正確並導致不匹配),我將如何調試該查詢。還要查看錶格的數據並手動檢查每個連接,以確保一個OID中的OID與另一箇中的OID相同。 – Turophile

+0

請注意,如果'OID'在三個表中,它應該只是PK中的一個 - 其他兩個將是FK,因此不是唯一的。 – Turophile