标签: outer-join

sqlite中多个JOIN语句的优先级是什么?

令我惊讶的是,以下两个查询返回了不同的结果:

SELECT *
  FROM foo
       JOIN bar
         ON bar.id=foo.bar_id

       JOIN baz
         ON baz.id=foo.baz_id

       LEFT JOIN zig
         ON zig.foo_id=foo.id;
Run Code Online (Sandbox Code Playgroud)

和:

SELECT *
  FROM foo
       LEFT JOIN zig
         ON zig.foo_id=foo.id

       JOIN bar
         ON bar.id=foo.bar_id

       JOIN baz
         ON baz.id=foo.baz_id;
Run Code Online (Sandbox Code Playgroud)

我想象,它不应该的问题,当你LEFT JOINzig,因为我没有使用,zig在加入时的列barbaz.然而,似乎在后者的JOIN的-ing barbaz吞噬其中行zignull值......这是为什么?

sql sqlite join left-join outer-join

5
推荐指数
1
解决办法
5792
查看次数

nhibernate在多对一实体上生成左外连接

我正在使用nHibernate 2.1.2并重新强调nhibernate将在嵌套的多对一实体上生成左外连接.它似乎开始在第三个嵌套音符上生成left-outer-join,从实体组织开始.我在映射文件中设置了以下强制使用内连接,我在映射文件中错过了什么?真的希望有人能给我一个暗示.感谢任何帮助!

lazy="false" fetch="join"
Run Code Online (Sandbox Code Playgroud)

示例和关系: 销售记录 - 员工 - 组织

nhibernate生成:

select...
from sales 
inner join employee
left outer join organization
Run Code Online (Sandbox Code Playgroud)

Sales.hbm.xml

<many-to-one name="Employee" insert="true" update="true" access="field.pascalcase-underscore" not-null="true" lazy="false" fetch="join"/>
<column name="EmployeeId" not-null="true"/>
</many-to-one>
Run Code Online (Sandbox Code Playgroud)

Employee.hbm.xml

<many-to-one name="Organization" insert="true" update="true" access="field.pascalcase-underscore" not-null="true" lazy="false" fetch="join"/>
<column name="OrgId" not-null="true"/>
</many-to-one>
Run Code Online (Sandbox Code Playgroud)

nhibernate outer-join

5
推荐指数
1
解决办法
3824
查看次数

我是否误解了加入?

我正在尝试学习ansi-92 SQL标准,但我似乎并不完全理解它(我对ansi-89标准以及一般的数据库都是新手).

在我的例子中,我有三个表王国 - <family - <species(生物分类).

  • 可能有没有物种或家庭的王国.
  • 可能有没有物种或善良的家庭.
  • 可能有没有王国或家庭的物种.

为什么会这样?

说一个生物学家,找到一个新的物种,但他没有把它分类为一个王国或一个家庭,创造一个没有物种的新家庭,并不确定它应属于哪个王国,等等.

这是一个小提琴(参见最后一个查询):http://sqlfiddle.com/#!4/015d1/3

我想提出一个问题来检索我每个王国,每个物种,但不是那些没有物种的家庭,所以我这样做.

    select *
    from reino r
         left join (
             familia f             
             right join especie e
                 on f.fnombre = e.efamilia
                 and f.freino = e.ereino
         ) on r.rnombre = f.freino 
           and r.rnombre = e.ereino;
Run Code Online (Sandbox Code Playgroud)

我认为这会做的是:

  1. 加入家庭和物种作为正确的联合,所以它带来了每个物种,但不是那些没有物种的家庭.因此,如果一个物种没有被归类为一个家庭,它将在家庭中出现无效.

  2. 然后,加入王国,结果作为左联盟,所以它带来了每个王国,即使没有归类于该王国的家庭或物种.

我错了吗?这不应该告诉我那些尚未归类的物种吗?如果我做内部查询它会带来我想要的东西.我在分组的东西有问题吗?

sql oracle outer-join

5
推荐指数
1
解决办法
195
查看次数

使用每行一次的完全外连接

我想知道是否有人找到解决这个问题的巧妙方法。我试图从几个表中选择数据,让记录逐行匹配。我基本上追求的是完整的外部连接,但有一个关键的区别。如果我在一个表中连接的列中有四行具有特定值,而另一个表中有三行具有该值,我只希望连接前三个结果,第四个结果就像有一直不匹配。

这样做的原因是创建一个对账报告,以确保在比较结果时不会多次计算交易。我可以通过使用一些分组和一些聚合函数来解决这个问题,但这隐藏了我想保留的一些细节。

下面是一个示例,展示了我所追求的东西,注释中的无效/伪代码说明了我如何认为这是有效的:

declare @t1 table (id bigint identity(1,1) primary key clustered, foreignKeyId bigint, otherData nvarchar(10))
declare @t2 table (id bigint identity(1,1) primary key clustered, foreignKeyId bigint, moreData nvarchar(10))

insert @t1 select 1, '1.1.1'
 union all select 1, '1.1.2'
 union all select 1, '1.1.3'
 union all select 3, '1.3.1'
 union all select 3, '1.3.2'
 union all select 3, '1.3.3'
 union all select 4, '1.4.3'

insert @t2 select 1, '2.1.1'
 union all select 1, '2.1.2'
 union all select 1, '2.1.3'
 union …
Run Code Online (Sandbox Code Playgroud)

sql sql-server join outer-join

5
推荐指数
1
解决办法
1656
查看次数

R成对产品

我试图获得矢量的成对产品

a = c(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

我想要得到的是

2,3,4,6,8,12(按此顺序).

我尝试过使用外部:

outer(1:4,2:4)
Run Code Online (Sandbox Code Playgroud)

这给了我一个矩阵,其中包括我想要的产品,但我不知道如何从矩阵中提取它们的方式可以扩展到更高维度的矢量.

谢谢!

product r outer-join

5
推荐指数
1
解决办法
1131
查看次数

如何用LEFT OUTER JOIN等效替换复杂的SQL MINUS查询

试图找出如何替换以下内容,使用等效的左外连接:

select distinct(a.some_value)
from table_a a, table_b b
where a.id = b.a_id 
and b.some_id = 123
and b.create_date < '2014-01-01' 
and b.create_date >= '2013-12-01'  
MINUS
select distinct(a.some_value)
from table_a a, table_b b
where a.id = b.a_id 
and b.some_id = 123 
and b.create_date < '2013-12-01' 
Run Code Online (Sandbox Code Playgroud)

不能做"NOT IN",因为第二个查询有太多数据.

sql outer-join

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

LEFT OUTER JOIN 且仅返回第一个匹配项

想象一下以下两个表,分别命名为“Users”和“Orders”:

ID  NAME
1   Foo
2   Bar
3   Qux


ID  USER  ITEM  SPEC  TIMESTAMP
1   1     12    4     20150204102314
2   1     13    6     20151102160455
3   3     25    9     20160204213702
Run Code Online (Sandbox Code Playgroud)

我想要得到的输出是:

USER   ITEM  SPEC  TIMESTAMP
1      12    4     20150204102314
2      NULL  NULL  NULL
3      25    9     20160204213702
Run Code Online (Sandbox Code Playgroud)

换句话说:在用户和订单之间执行 LEFT OUTER JOIN,如果您没有找到该用户的任何订单,则返回 null,但如果找到一些,则仅返回第一个订单(基于时间戳的最早订单) 。

如果我只使用 LEFT OUTER JOIN,它将为用户 1 返回两行,我不希望这样。我想过将 LEFT OUTER JOIN 嵌套在另一个选择中,该选择将按其他字段进行分组并获取 MIN(TIMESTAMP) 但这也不起作用,因为我需要在我的分组依据中包含“SPEC”,并且因为这两个订单有不同的规格,它们仍然都出现。

任何有关如何实现预期结果的想法都将受到赞赏。

sql sql-server left-join outer-join

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

如何在Spark结构化流媒体上进行两个流之间的连接? - Java 8

我知道,目前还不支持两个流之间的连接.但无论如何还有办法吗?或者我需要等待Spark 2.2.0?谢谢

outer-join java-8 spark-structured-streaming

5
推荐指数
1
解决办法
4065
查看次数

如何使用NA以外的值填充merge(...,all = TRUE,...)中的缺失值?

简而言之:我正在寻找一种通用方法来填充缺失值,merge(..., all = TRUE, ...)而不是使用常量NA.


假设

z <- merge(x, y, all = TRUE, ...)
Run Code Online (Sandbox Code Playgroud)

...那我想在所有缺失值z(从任一丢失的钥匙导致xy将填充(非)NA)不变FILL_VALUE.


首先,简单的案例:

FILL_VALUE <- "-"

x <- data.frame(K=1001:1005,
                I=3:7,
                R=c(0.1, 0.2, 0.3, 0.4, 0.5),
                B=c(TRUE, FALSE, TRUE, FALSE, TRUE),
                C=c(0.1+0.2i, 0.3+0.4i, 0.5+0.6i, 0.7+0.8i, 0.9+1.0i))

y <- data.frame(K=1001:1003,
                S1=c("a", "b", "c"),
                S2=c("d", "e", "f"),
                stringsAsFactors = FALSE)

z <- merge(x, y, all = TRUE, by = "K")

## > z
## …
Run Code Online (Sandbox Code Playgroud)

merge r outer-join dataframe na

5
推荐指数
1
解决办法
421
查看次数

使用完全外连接连接 pandas 中的两个数据帧

我在 pandas 中有两个数据框,如下所示。EmpID 是两个数据帧中的主键。

df_first = pd.DataFrame([[1, 'A',1000], [2, 'B',np.NaN],[3,np.NaN,3000],[4, 'D',8000],[5, 'E',6000]], columns=['EmpID', 'Name','Salary'])
df_second = pd.DataFrame([[1, 'A','HR','Delhi'], [8, 'B','Admin','Mumbai'],[3,'C','Finance',np.NaN],[9, 'D','Ops','Banglore'],[5, 'E','Programming',np.NaN],[10, 'K','Analytics','Mumbai']], columns=['EmpID', 'Name','Department','Location'])
Run Code Online (Sandbox Code Playgroud)

我想用 EmpID 连接这两个数据框,以便

  1. 如果存在并且键匹配,一个数据框中的缺失数据可以用另一表中的值填充
  2. 如果存在带有新键的观察结果,则应将它们附加到结果数据框中

我使用下面的代码来实现这一点。

merged_df = pd.merge(df_first,df_second,how='outer',on=['EmpID'])
Run Code Online (Sandbox Code Playgroud)

但这段代码给了我我不想要的重复列,因此我只使用两个表中的唯一列进行合并。

ColNames = list(df_second.columns.difference(df_first.columns))
ColNames.append('EmpID')
merged_df = pd.merge(df_first,df_second,how='outer',on=['EmpID'])
Run Code Online (Sandbox Code Playgroud)

现在我没有得到重复的列,但在键匹配的观察中也没有得到价值。

如果有人能帮助我,我将非常感激。

问候, 凯拉什·内吉

python join outer-join python-3.x pandas

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