标签: outer-join

如何在> 2个表(Oracle)上进行外连接

我不确定如何描述我的表格结构,所以希望这是有道理的......

我有3个层次关系的表,这样A与B之间有一对多的关系,而B又与C有一对多的关系.诀窍是允许B和C中的外键为空(即没有父项)定义).我也有D和E,与A,B或C(直接)无关.

最后,我有一个F,它是一个与C,D和E有多对一关系的连接表.它的所有字段(FK到其他表)都不可为空.

我想编写一个SQL语句来连接单个结果集中的所有表.我知道我必须使用外部联接,因为我希望所有的A都返回,无论它是否在B中有子项,与B和C类似.

问题一:我一直在研究ANSI外连接语法(之前我只使用过Oracle"(+)")并且找不到外连接超过2个表的示例.有人可以提供/指出一个例子吗?

问题二:是否可以根据连接表F包含表D和E中的记录?如果是这样,这是用外连接完成的吗?

谢谢!

编辑

当然,在我发布这个之后,我找到了一个回答问题1的例子.然而,问题2仍然让我难过.

例:

         SELECT A.a,
                B.b,
                C.c
           FROM A
FULL OUTER JOIN B ON B.a = A.a
FULL OUTER JOIN C ON C.b = B.b
Run Code Online (Sandbox Code Playgroud)

oracle multiple-tables outer-join

7
推荐指数
2
解决办法
5万
查看次数

使用data.table进行矩阵运算和分量加法

如果事先不知道要求和的矩阵数,那么进行分量加法的最佳方法是什么?更一般地说,有没有一种很好的方法在的上下文中执行矩阵(或多维数组)操作?我data.table通过几个固定变量或类别对数据进行排序和分组的效率,每个变量或类别包含不同数量的观察值.

例如:

  1. 找到数据的每个观察(行)中给出的向量分量的外积,返回每行的矩阵.
  2. 在每组数据类别的所有行上按组件顺序对结果矩阵求和.

这里用2x2矩阵说明,只有一个类别:

library(data.table)

# example data, number of rows differs by category t
N <- 5
dt <- data.table(t = rep(c("a", "b"), each = 3, len = N), 
                 x1 = rep(1:2, len = N), x2 = rep(3:5, len = N),
                 y1 = rep(1:3, len = N), y2 = rep(2:5, len = N))
setkey(dt, t)
> dt
   t x1 x2 y1 y2
1: a  1  3  1  2
2: a  2  4 …
Run Code Online (Sandbox Code Playgroud)

r matrix outer-join data.table

7
推荐指数
1
解决办法
804
查看次数

使用SQL的OUTER JOIN有哪些好例子?

我经常在面试中被问到"什么是SQL中的外部联接"?

虽然可以回答,但我想知道使用(LEFT)OUTER JOIN的一些经典和好的现实生活例子是什么?

sql join left-join outer-join

6
推荐指数
3
解决办法
3万
查看次数

Canonical外部连接拉链功能

如果将列表中每个元素的(隐式)索引视为其键,则zipWith有点像关系内连接.它只处理两个输入都具有值的键:

zipWith (+) [1..5] [10..20] == zipWith (+) [1..11] [10..14] == [11,13,15,17,19] 
Run Code Online (Sandbox Code Playgroud)

是否存在与外连接对应的规范对应函数?就像是:

outerZipWith :: (a -> b -> c) -> a -> b -> [a] -> [b] -> [c]
outerZipWith _ _ _ [] [] = []
outerZipWith f a' b' [] (b:bs) = f a' b : outerZipWith f a' b' [] bs
outerZipWith f a' b' (a:as) [] = f a b' : outerZipWith f a' b' as []
outerZipWith f a' b' (a:as) (b:bs) …
Run Code Online (Sandbox Code Playgroud)

zip haskell outer-join

6
推荐指数
2
解决办法
704
查看次数

NHibernate - 左连接

我有以下两个表:

作业 AreaID,JobNo(复合键)

记录 LogID,AreaID,JobNo

我需要获得所有没有与之关联的日志的作业.在SQL中我可以这样做:

SELECT Jobs.AreaID,
       Jobs.JobNo
FROM   Jobs
       LEFT JOIN Logs
           ON Jobs.AreaID = Logs.AreaID
           AND Jobs.JobNo = Logs.JobNo
WHERE  Logs.LogID is null
Run Code Online (Sandbox Code Playgroud)

但我不知道如何用NHibernate来实现这一目标.任何人都可以提供任何指示吗?

这是我的映射:

<class name="Job" table="Jobs">
    <composite-key name="Id">
        <key-property name="JobNo"/>
        <key-many-to-one name="Area" class="Area" column="AreaID"/>
    </composite-key>
</class>

<class name="Log" table="Logs">
    <id name="Id" column="LogID">
        <generator class="identity"/>
    </id>
    <property name="JobNo"/>
    <many-to-one name="Area" class="Area" column="AreaID"/>
</class>
Run Code Online (Sandbox Code Playgroud)

谢谢

更新

好的,我略微修改了诺西拉的答案,现在正在做我想要的事情:

Log logs = null;

return session.QueryOver<Job>()
    .Left.JoinAlias(x => x.Logs, () => logs)
    .Where(x => logs.Id == null)
    .List<Job>();
Run Code Online (Sandbox Code Playgroud)

我还必须将此添加到我的Job映射中:

<bag …
Run Code Online (Sandbox Code Playgroud)

nhibernate join left-join outer-join

6
推荐指数
2
解决办法
1万
查看次数

SQL(+)=定义和功能

我想知道SQL中的这个语句实际上是做什么的:

select * 
from table 
where A (+)= B
Run Code Online (Sandbox Code Playgroud)

我反对:

select * 
from table 
where A = B
Run Code Online (Sandbox Code Playgroud)

并看到了差异,但不知道如何形成关于(+)=的功能的解释.在我看来,(+)=告诉它使其满足条件A = B可用,如果组件不可用则忽略/输入为"空".

此外,此语句在create view语句中运行.

提前致谢.

sql oracle outer-join

6
推荐指数
1
解决办法
434
查看次数

左外连接B如何返回比A中更多的行?

这个简单的SQL外连接有什么问题?

select count(*) from A -- 25766
select count(*) from B -- 1242
select count(*) from A left outer join B on A.b = B.b -- 310176
Run Code Online (Sandbox Code Playgroud)

分别返回25766,1242和310176行.(这适用于Microsoft SQL Server 2012.)如何A left outer join B返回比存在更多的行A,特别是在这个维恩图的情况下?我想我犯的是一个愚蠢的错误但它是什么?

sql database sql-server outer-join

6
推荐指数
1
解决办法
5253
查看次数

如何在 MySQL 中完全 OUTER JOIN 多个表

我需要FULL OUTER JOIN多个表。我知道如何FULL OUTER JOIN这里到两张桌子。但是我有几张表,我无法将其应用于它们。我怎样才能实现它?
我的SQL代码如下:

INSERT INTO table
(
  customer_id
 ,g01
 ,g02
 ,g03
 ,has_card
 ,activity
  )
  SELECT sgd.customer_id, sgd.g01,sgd.g02,sgd.g03,sc.value, a.activity
  FROM s_geo_data sgd
  LEFT JOIN s_category sc
  ON sc.customer_id = sgd.customer_id
    UNION
  SELECT sgd.customer_id, sgd.g01,sgd.g02,sgd.g03,sc.value, a.activity
  FROM s_geo_data sgd
  RIGHT JOIN s_category sc
  ON sc.customer_id = sgd.customer_id

    UNION

  SELECT sgd.customer_id, sgd.g01,sgd.g02,sgd.g03,sc.value, a.activity
  FROM s_geo_data sgd
  LEFT JOIN s_activity a
  ON a.customer_id = sgd.customer_id
    UNION
  SELECT sgd.customer_id, sgd.g01,sgd.g02,sgd.g03,sc.value, a.activity
  FROM s_geo_data sgd …
Run Code Online (Sandbox Code Playgroud)

mysql join outer-join query-performance

6
推荐指数
1
解决办法
2万
查看次数

渴望加载结果时,"TypeError:没有将nil隐式转换为String"

我正在使用ruby '2.3.0''rails', '3.2.22.2'.

我需要一些关于我所做查询的帮助和解释.这是我的模特:

class AssessmentRaw < ActiveRecord::Base
  belongs_to :session
  has_many :schedulers, :class_name => 'MailingScheduler', :as => :owner, :dependent => :destroy
end

class MailingScheduler < ActiveRecord::Base
  belongs_to :owner, :polymorphic => true
end

class Session < ActiveRecord::Base
  has_many :assessment_raws, :dependent => :destroy
end
Run Code Online (Sandbox Code Playgroud)

我想检索所有的assessment_raws,并急切加载关联的会话和mailing_schedulers.

1.急切加载会话

ars = AssessmentRaw.includes(:session).where("sessions.start_at >= ?", 1.year.ago).limit(10)

ars.map { |ar| ar.session.id } => [2877,2878,2879,2888,2881,2882,2883,2884,2902,2903]

`ars.map { |ar| ar.schedulers.try(:size) }`
   MailingScheduler Load (0.6ms)  SELECT "mailing_schedulers".* FROM "mailing_schedulers" WHERE "mailing_schedulers"."owner_id" = 622 AND "mailing_schedulers"."owner_type" = …
Run Code Online (Sandbox Code Playgroud)

activerecord outer-join eager-loading arel ruby-on-rails-3

6
推荐指数
1
解决办法
740
查看次数

使用 pandas.merge_asof 进行全外连接

您好,我需要将一些时间序列数据与最近的时间戳对齐,所以我认为pandas.merge_asof可能是一个很好的候选者。但是,它没有how='outer'像标准merge方法那样设置的选项。

一个例子可以是:

df1:

                                   Value1
Time
2020-07-17 14:25:03.535906075      108
2020-07-17 14:25:05.457247019      110
2020-07-17 14:25:07.467777014      126
Run Code Online (Sandbox Code Playgroud)

df2:

                                  Value2
Time
2020-07-17 14:25:03.535018921     222
2020-07-17 14:25:04.545104980     150
2020-07-17 14:25:07.476825953      60
Run Code Online (Sandbox Code Playgroud)

例如,执行以下操作merge_asof

pd.merge_asof(df1, df2, left_index=True, right_index=True, direction='nearest', tolerance=pd.Timedelta('0.3s'))
Run Code Online (Sandbox Code Playgroud)

结果将是:

                               Value1  Value2
Time
2020-07-17 14:25:03.535906075     108   222.0
2020-07-17 14:25:05.457247019     110     NaN
2020-07-17 14:25:07.467777014     126    60.0
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

                               Value1  Value2
Time
2020-07-17 14:25:03.535906075     108   222.0
2020-07-17 14:25:04.545104980     NaN   150.0   <---- this is the difference
2020-07-17 14:25:05.457247019     110     NaN
2020-07-17 14:25:07.467777014 …
Run Code Online (Sandbox Code Playgroud)

python merge outer-join dataframe pandas

6
推荐指数
1
解决办法
3945
查看次数