繁体   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