外连接仅用于开发人员的分析吗?我无法找到一个用例,说明为什么要将数据包含在两个或多个不相关或不匹配选择条件的表中.
我在Oracle数据库中有两个表(A和G),可以根据帐号连接在一起.对此的一个警告是,其中一个表(G)的记录比另一个少约80个.当我一起查询两个表时,我需要获取所有行,以便我们在缺少的80行的列中看到NULL数据.
我目前有一个Oracle语句,它使用以下"遗留"语法执行左外连接查询:
SELECT A.AccountNo,
A.ParcelNo,
A.LocalNo,
A.PrimaryUseCode,
A.DefaultTaxDistrict,
RTRIM(G.Section),
RTRIM(G.Township),
RTRIM(g.Range)
FROM tblAcct A, tblAcctLegalLocation G
WHERE A.verstart <= '20100917999' AND A.verend > '20100917999' AND A.DefaultTaxDistrict = '2291'
AND (SUBSTR(A.AccountNo,1,1) = 'R' or SUBSTR(A.AccountNo,1,1)= 'I')
AND SUBSTR(a.ParcelNo,1,1)<> '7' and substr(a.ParcelNo,1,1)<>'8'
AND A.AcctStatusCode IN ('A', 'T', 'E')
AND A.AccountNo = G.AccountNo(+)
AND G.verstart(+) <= '20100917999' and G.verend(+) > '20100917999'
ORDER BY A.ParcelNo, A.LocalNo
Run Code Online (Sandbox Code Playgroud)
我正在尝试将此查询转换为"标准"LEFT JOIN类型查询,因为我被告知较新版本的Oracle支持此语法.我试过基本的
LEFT OUTER JOIN ON A.AccountNo = G.AccountNo
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.我的查询最多返回80行,少于全部数量.
任何人都可以告诉我我缺少什么或如何正确格式化查询?
我有两个具有相同主键的表,但是一个比另一个大得多.我想知道哪些ID在较小的表中有一行.(在这个例子中,a很大而且b很小).现在,我正在使用带有CASE的OUTER JOIN来确定b值是否为NULL.它不起作用(总是得到1).修复此问题会很好,但必须有更好的方法.我该怎么办?
SELECT a.id,
CASE b.id
WHEN NULL THEN 0
ELSE 1
END AS exists
FROM a LEFT OUTER JOIN b
ON a.id=b.id;
Run Code Online (Sandbox Code Playgroud) 我正在更新使用旧结构进行外连接的查询(=*和*=).我有3个表,我需要包含在外连接中.
原始查询是:
SELECT s.SkillID ,
NULL AS Signature ,
NULL AS DPL ,
CASE WHEN ISNULL(ds.DPL, dg.DPL) IS NULL
THEN p.ScaleTo - p.ScaleFrom + 1
ELSE ISNULL(ds.DPL, dg.DPL)
END AS DefaultDPL
FROM tbJobs j ,
tbSkills s
INNER JOIN tbSkillGroups sg ON s.SkillGroupID = sg.SkillGroupID ,
tbPerfScales p ,
tbDPLs ds ,
tbDPLs dg
WHERE j.JobID = 866
AND ( ds.LevelID=*j.LevelID
AND ds.IDType = 1
AND ds.GroupOrSkillID=*s.SkillID
)
AND ( dg.LevelID=*j.LevelID
AND dg.IDType = 0
AND dg.GroupOrSkillID=*sg.SkillGroupID
)
AND ( …Run Code Online (Sandbox Code Playgroud) 当我在带有 OUTER JOIN 的查询上使用 PostgreSQL 的CUBE时,我得到一个额外的全 NULL 行,该行无法与多维数据集自己的“所有内容组合”的全 NULL 结果区分开来。
CREATE TABLE species
( id SERIAL PRIMARY KEY,
name TEXT);
CREATE TABLE pet
( species_id INTEGER REFERENCES species(id),
is_adult BOOLEAN,
number INTEGER)
;
INSERT INTO species VALUES
(1, 'cat'), (2, 'dog');
INSERT INTO pet VALUES
(1, true, 3), (1, false, 1), (2, true, 1), (null, true, 2);
Run Code Online (Sandbox Code Playgroud)
好的,总共有 7 只宠物:
SELECT SUM(number) FROM pet;
sum
-----
7
(1 row)
Run Code Online (Sandbox Code Playgroud)
现在看看立方体的总行数:
SELECT * FROM (
SELECT name, is_adult, SUM(number) …Run Code Online (Sandbox Code Playgroud) 我什至想不出正确的问题标题。我会接受任何建议来编辑它。
我的问题:我有一个有两个模型的应用程序(工作板):User,Job。用户可以有很多作业,作业可以是premium或free。作业也可以过期或活跃。如果valid_until参数为IS NOT NULL,则它们处于活动状态,否则它们将过期(我每天都有一个后台作业来自动设置)。
我正在尝试选择拥有活跃职位的用户,但我希望拥有优质职位的用户排在拥有免费职位的用户之前,假设用户可以同时拥有活跃的优质和免费职位发布。
SELECT DISTINCT users.id, users.email FROM users
LEFT OUTER JOIN jobs ON jobs.owner_id = users.id
WHERE jobs.valid_until IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
以上查询正确选择了至少有一项活动工作(高级或免费)的用户,我只需要根据工作表对用户进行排序。我将不胜感激任何帮助/提示。谢谢!
我有这两个表:
运营商:
Id Nome
--+----
1 JDOE
2 RROE
3 MMOE
Run Code Online (Sandbox Code Playgroud)
呼叫:
Id CallDate OpId
--+--------+----
1 20161228 2
2 20161228 3
3 20161228 2
4 20161228 3
5 20170104 1
6 20170104 2
7 20170104 1
Run Code Online (Sandbox Code Playgroud)
而这个查询:
SELECT Operators.id, Operators.Nome, Count(Calls.OpId) AS CountCalls
FROM Operators LEFT JOIN Calls ON Operators.id = Calls.OpId
GROUP BY Calls.CallDate, Operators.id, Operators.Nome
HAVING Calls.CallDate=20170104;
Run Code Online (Sandbox Code Playgroud)
哪个回报:
Id Nome CountCalls
--+----+----------
1 JDOE 2
2 RROE 1
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它归还呢?
Id Nome CountCalls
--+----+----------
1 JDOE 2
2 …Run Code Online (Sandbox Code Playgroud) 我想通过查找 mongoDB 查询在 MongoDB 中执行完全外连接。这可能吗?MongoDB 是否有其他替代方案支持完全外连接?
[更新:]
我想从 Collection1 和 Collection2 获得结果,如下附件:
示例:需要结果
上述结果列中可能存在不同的算术运算,将进一步用于计算。
我有两个 DataFrame 具有相同的列名,其中包含一些匹配数据和一些唯一数据。
我想排除中间部分,只保存两个 DataFrame 的独特之处。
我将如何连接或合并或加入这两个数据帧来做到这一点?
例如在这张图片中,我不想要这张图片的中间,我想要两边而不是中间:
这是我现在的代码:
def query_to_df(query):
...
df_a = pd.DataFrame(data_a)
df_b = pd.DataFrame(data_b)
outer_results = pd.concat([df_a, df_b], axis=1, join='outer')
return df
Run Code Online (Sandbox Code Playgroud)
让我举个例子说明我需要什么:
df_a =
col_a col_b col_c
a1 b1 c1
a2 b2 c2
df_b =
col_a col_b col_c
a2 b2 c2
a3 b3 c3
# they only share the 2nd row: a2 b2 c2
# so the outer result should be:
col_a col_b col_c col_a col_b col_c
a1 b1 c1 NA NA NA
NA NA …Run Code Online (Sandbox Code Playgroud) 我想对具有多个条件的两个表执行完全外连接,以生成两个表中的所有匹配记录以及不匹配的记录。Tbl1 是一个更大的表,有 21 M 条记录,Tbl2 有 5k 行,如下面的示例查询。但外连接无法使用 OR 条件执行,因为出现错误“如果没有连接两侧字段相等的条件,则无法使用 FULL OUTER JOIN”。在这种情况下,编写单独的查询,然后使用 COALESCE 是唯一的解决方案吗?我不确定如何实施这个解决方案。寻求任何帮助来解决这个问题。
SELECT
*
FROM
`myproject.table1` as t1
Full Outer JOIN
`myproject.table2` as t2
ON
(
t1.Camp1ID = t2.ID
OR t1.Camp2ID = t2.ID
OR t1.Camp3ID = t2.ID
OR t1.Camp4ID = t2.ID
OR t1.Camp5ID h = t2.ID
OR t1.Camp6ID = t2.ID
OR t1.Camp7ID = t2.ID
OR t1.Camp8ID = t2.ID
OR t1.Camp9ID = t2.ID
OR t1.Camp10ID = t2.ID
OR t1.Camp11ID = t2.ID
OR t1.Camp12ID = t2.ID
OR t1.Camp13ID = …Run Code Online (Sandbox Code Playgroud)