簡體   English   中英

將兩個SQL查詢合並為一個

[英]Combining two SQL queries into one

我嘗試合並兩個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))

我嘗試了這個,導致“ Ration”為空:

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))

因此,我嘗試了此操作,這也導致“ Ration”為空:

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))

這很難回答,因為我不知道您的表之間的關系。 在“工作”查詢中,您正在測試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

風格注釋:順便說一句,(對我而言)很難理解哪個表是N0,N1,N3和N3。 為什么不將它們別名為BA,AHD,DM和AFDC? 另外,括號過多(多余)。

注意:由於我沒有您的表格或數據,因此無法測試。 您如何創建SQLfiddle?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM