标签: outer-join

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

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

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

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

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
查看次数

RIGHT OUTER JOIN和LEFT OUTER JOIN的组合怎么写

任何人都可以帮我解决以下查询..

这里我们有 1. 左外连接 2. 两个右外连接

如何组合左右 OJ 并创建与上述相同的效果,

我需要重写相同的查询,这是因为我是我们的老MS SQL2009转换成MS SQL2012 ..而在2012年*==*不支持。

SELECT X.master_key, X.vendor_code  
FROM 
X, Y, X x2 
WHERE Y.master_key = X.parent_key  
AND Y.master_key *= x2.parent_key 
AND x2.INITIALS =* Y.DEFAULT_INITIALS 
AND x2.VENDOR_CODE =* Y.VENDOR_ABBREV 
AND Y.project_name = 'TEST'  
Run Code Online (Sandbox Code Playgroud)

我已经用我的基本知识修改了上面的代码,如下所示,但根本不起作用

SELECT X.master_key, X.vendor_code  
FROM 
X, 
Y left outer join X x2 
on Y.master_key = x2.parent_key,

X vnd RIGHT OUTER JOIN Y vnm 
(on vnd.INITIALS = vnm.DEFAULT_INITIALS AND vnd.VENDOR_CODE = vnm.VENDOR_ABBREV )

WHERE Y.master_key = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server select join outer-join

5
推荐指数
2
解决办法
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万
查看次数

使用完全外连接连接 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万
查看次数

如何在mysql中组合内部和外部联接

我可以在sybase中完成它,我可以在oracle中完成它,但我没有看到如何在mysql中完成它.

我有这个:(请限制自己重新格式化我的sql,上次有人这样做,他们改变它,所以它不一样,使问题毫无意义)

select table1.id
from
table1
  inner join
    table2 on (table1.id = table2.id and table2.data='cat'),
table1 t1
  left outer join
    table3 on (t1.id = table3.id and table3.data = 'dog')
Run Code Online (Sandbox Code Playgroud)

而且我得到了各种没有意义的结果.

我想得到table1中所有id的列表,其中table2.data = cat,然后对表3执行外连接,其中table3.data = dog.

我注意到我不能在两个join子句中为table1指定相同的表/别名,因此这让我相信mysql分别运行连接表达式并将结果OR运算在一起或类似的东西.

我也尝试摆脱from部分中的"内部联接"并将其放在where子句中,这也不起作用,尽管它不能以不同的方式工作(得到不同的错误结果)

这在sybase或oracle中会非常容易.

我究竟做错了什么?

mysql inner-join outer-join

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

如何在与自身连接表时排除重复的行

这是一个示例表来帮助说明我的问题:

mysql> select * from test;
+----+--------------+--------+
| id | type         | siteid |
+----+--------------+--------+
|  1 | First Visit  |    100 |
|  2 | Second Visit |    100 |
|  3 | First Visit  |    300 |
|  4 | First Visit  |    400 |
|  5 | Second Visit |    500 |
|  6 | Second Visit |    600 |
+----+--------------+--------+
Run Code Online (Sandbox Code Playgroud)

我正在尝试将表连接到自身,将具有相同siteid值的行组合在一起.这是我的尝试:

mysql> select * from test T1
    -> LEFT OUTER JOIN test T2 on T1.siteid = …
Run Code Online (Sandbox Code Playgroud)

sql oracle group-by outer-join

4
推荐指数
1
解决办法
6470
查看次数

mySQL外连接

我有2个表,我需要运行查询

Table1有2个字段:l_id和name

表2还有2个字段:l_id和b_id

我需要运行一个查询来获取table1中所有条目的"name"和"l_id",这些条目在table2中没有给定b_id的条目.

希望这有一定道理

mysql join outer-join

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

如何在java中传播线程中的异常?

码:

    outerMethod {
        @Override
        public void run() {
                innerMethod throws IOException
                }
    }
Run Code Online (Sandbox Code Playgroud)

在线程中抛出的方法抛出已检查的异常 - IOException.我需要在主线程中处理此异常.喜欢:

outerMethod() throws IOException
   {
        @Override
        public void run() {
                innerMethod() throws IOException
                }
    }
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果不是,那么更好的方法是什么?

谢谢.

java methods multithreading exception outer-join

4
推荐指数
1
解决办法
3251
查看次数

R中的"不加入"

我正在寻找一种快速的方法来做"不加入"(即保持不合并的行,或内部联接的反向).我一直在做的方法是使用data.table for X和Y,然后设置key.例如:

require(data.table)

X <- data.table(category = c('A','B','C','D'), val1 = c(0.2,0.3,0.8,0.7))
Y <- data.table(category = c('B','C','D','E'), val2 = c(2,3,5,7))
XY <- merge(X,Y,by='category')

> XY
   category val1 val2
1:        B  0.3    2
2:        C  0.8    3
3:        D  0.7    5
Run Code Online (Sandbox Code Playgroud)

但我需要反过来,所以我必须这样做:

XY_All <- merge(X,Y,by='category',all=TRUE)
setkey(XY,category)
setkey(XY_All,category)
notXY <- XY_All[!XY]    #data.table not join (finally)

> notXY
   category val1 val2
1:        A  0.2   NA
2:        E   NA    7
Run Code Online (Sandbox Code Playgroud)

我觉得这很长篇大论(特别是来自data.frame).我错过了什么吗?

编辑:我在考虑了更多关于不加入之后得到了这个

X <- data.table(category = c('A','B','C','D'), val1 = c(0.2,0.3,0.8,0.7),key = "category")
Y <- …
Run Code Online (Sandbox Code Playgroud)

merge r inner-join outer-join data.table

4
推荐指数
2
解决办法
2227
查看次数

合并非关键变量的所有"出现次数"

我有两个数据集,我想要的可能被宽泛地称为"非关键变量的外连接".

这是数据集

数据集1

oc  oc2 state_id    r_state 
A011    A01 1808    1.00    
A011    A01 1810    0.50    
A012    A01 1810    0.50    
A011    A01 1814    0.33    
A012    A01 1814    0.33    
A013    A01 1814    0.33    
Run Code Online (Sandbox Code Playgroud)

数据集2

oc  r_country
A011    0.62
A012    0.14
A013    0.24
Run Code Online (Sandbox Code Playgroud)

我想要的输出如下:

oc  oc2 state_id    r_state r_country
A011    A01 1808    1.00    0.62
A012    A01 1808    NA      0.14
A013    A01 1808    NA      0.24
A011    A01 1810    0.50    0.62
A012    A01 1810    0.50    0.14
A013    A01 1810    NA      0.24
A011    A01 1814    0.33 …
Run Code Online (Sandbox Code Playgroud)

merge r outer-join data.table

4
推荐指数
1
解决办法
59
查看次数