我需要将Header和Detail行连接到一个结果集中:
(样本DDL并inserts遵循):
订单:
OrderID  OrderDate                CurrencyID  BuyAmount  BuyRate 
=======  =======================  ==========  =========  ========
1        2011-09-01 15:57:00.000  7           12173.60   1.243893
1        2011-09-01 15:57:00.000  9           69.48      1
订单详细信息:
OrderID  CurrencyID  SellAmount  SellRate
=======  ==========  ==========  ========
1        7           10000       1
1        8           12384       0.9638
我希望他们加入OrderID并且CurrencyID:
OrderID  CurrencyID  BuyAmount  BuyRate   SellAmount  SellRate
=======  ==========  =========  ========  ==========  ========
1        7           12173.60   1.243893  10000       1
1        8           NULL       NULL      12384       0.9638
1 …我正在比较SQL引擎之间的行为.Oracle有一种我期望从SQL引擎获得完全外连接的行为:
CREATE TABLE sql_test_a 
( 
    ID         VARCHAR2(4000 BYTE), 
    FIRST_NAME VARCHAR2(200 BYTE), 
    LAST_NAME  VARCHAR2(200 BYTE) 
); 
CREATE TABLE sql_test_b 
( 
    NUM         VARCHAR2(4000 BYTE), 
    FIRST_NAME VARCHAR2(200 BYTE), 
    LAST_NAME  VARCHAR2(200 BYTE) 
); 
INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('1', 'John', 'Snow'); 
INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('2', 'Mike', 'Tyson'); 
INSERT INTO sql_test_b (NUM, FIRST_NAME, LAST_NAME) VALUES ('20', 'Mike', 'Tyson'); 
当我执行以下操作时,它会给出预期的结果.结果表包含两行,其中一行包含NULL该NUM字段,因为表中没有约翰雪sql_test_b.
SELECT A.FIRST_NAME, A.LAST_NAME, A.ID, B.NUM
FROM
SQL_TEST_A A
FULL OUTER JOIN
SQL_TEST_B B …嗨,我有一个用户可以选择的实体表,我还有另一个表,其中包含有关用户最喜欢的实体的信息.看到:
表Entity:
id | ...
表SavedEntity:
id | entity_id | user_id
我希望结果如下:
entity_id | ... | favourite
我的问题是如何更改我的查询获取所有实体,并添加一个额外的字段是boolean实体是否是用户的最爱的值?
我已经看过使用(或模仿!)a FULL JOIN但这似乎不必要地复杂,我无法让它工作,我已经看了CASE关键字,但我再次没有运气.
这种多对多的表结构是相当标准的我相信所以我确信有一种获取所需信息的标准方法,任何人都可以帮我弄清楚我缺少的东西吗?
NB我正在使用CodeIgniter和我的查询的活动记录,但我可以解决vanilla SQL问题.
上周我惊讶地发现 sybase 12 不支持全外连接。但我突然想到,一个完整的外连接应该与同一个 sql 的右外连接联合的左外连接相同。任何人都可以想出一个不成立的原因吗?
我需要基于一个公共主键加入4个表.如果sqlite实现了完全外连接,它可能看起来像这样(没有考虑优化).
SELECT S.pair, C.ball, P.bluejeans, B.checkered 
FROM Socks S 
FULL OUTER JOIN Caps C 
FULL OUTER JOIN Pants P 
FULL OUTER JOIN Boxers B 
WHERE S.color = C.color AND S.color = P.color AND S.color = B.color;
我看起来很长很难,我找到的最好的是这个2表sqlite完全连接实现了左连接和联合alls:
SELECT employee.*, department.* 
FROM employee LEFT JOIN department 
ON employee.DepartmentID = department.DepartmentID 
UNION ALL SELECT employee.*, department.* 
FROM   department LEFT JOIN employee 
ON employee.DepartmentID = department.DepartmentID 
WHERE  employee.DepartmentID IS NULL;
我正在尝试修改它以适用于超过2个表,但我是SQL新手,我不会太过分.是否有可能在合理的时间内得到这个结果?
我认为我有一个正确的3个表的实现(它可能不正确)但我似乎仍然无法得到它4.这是我有3个:
SELECT S.pair, C.ball, P.bluejeans 
FROM Socks S LEFT JOIN Caps C …我正在开发游戏库存管理系统,并希望在一张表中显示所有者的进货希望清单和每个游戏的客户购买预订计数.我写了一个我认为有效的查询,但后来我注意到它实际上省略了任何有预订的游戏,但最初并没有在补货愿望列表中.查询如下:
SELECT rwl.*, g.gameName, coalesce(payYes, 0) payYes, coalesce(payNo, 0) payNo FROM RestockWishList AS rwl, Games AS g
        LEFT JOIN
        (SELECT gameID, COUNT(if(prepaid='Yes', 1, NULL)) payYes, COUNT(if(prepaid='No', 1, NULL)) payNo FROM ReservationsBuy GROUP BY gameID) AS res
        ON res.gameID = g.gameID
        WHERE rwl.gameID = g.gameID;
查询结果:gameID,quantity,gameName,payYes,payNo
1,4,所有季节的城堡,0,0
2,2,几英亩的雪,0,0
18,4,Alhambra,0,0
54,2,Big Boggle,2,0
显然,这个问题的解决方案是使用FULL OUTER JOIN而不是LEFT JOIN,但MySQL不支持该功能.我花了几个小时试图将它转换为UNION结构,但不能让它正常工作.这跟我一样接近:
SELECT rwl.*, res.gameID, res.payYes, res.payNo FROM RestockWishList rwl
LEFT JOIN
(SELECT gameID, COUNT(if(prepaid='Yes', 1, NULL)) payYes, COUNT(if(prepaid='No', 1, NULL)) payNo FROM ReservationsBuy GROUP BY gameID) AS …处理来自多个表的数据时,您可以通过多种不同的方式处理JOIN这些表,每种方式都会改变处理匹配列的方式。您也可以从多个表中提取数据,即FROM [table a], [table b].
这种方法似乎仍然以某种方式连接表格,如果我不得不猜测,我会说这种方法只是 的简写FULL OUTER JOIN,但我确定两者之间存在差异。
区别只是跟FULL OUTER JOIN在 后面ON [table 1 specific column] = [table 2 specific column],还是发生了其他事情?
这是我面临的情况:
我有两个表A和B.如果记录在表A中而不在表B中,则需要将它们添加到表B.如果记录在表B中而不在表A中,则需要将它们从表B中删除这里的诀窍是它是两个键的混合,使得独特的组合
Table A    
Operation_Key    Part_Key  
1                1
1                2
2                1
2                3
Table B
Operation_Key    Part_Key  Record_Key
1                1         1
2                1         2
2                3         3
2                4         4
我试图获得正确的查询类型,以便返回的结果如下
Results
Operation_Key        Part_Key  Record_Key   Action
1                    2         NULL         Add
2                    4         4            Delete
到目前为止我的查询看起来像这样:
CREATE TABLE #Action_Table
(
  Action VARCHAR(6),
  Action_Bit INT,
  Operation_Key INT,
  Record_Key INT,
  Part_Key INT
)
INSERT INTO #Action_Table
SELECT 
  CASE
    WHEN WS.Operation_Key IS NULL THEN 'Delete'
    WHEN WS.Operation_Key IS NOT NULL THEN 'Add'
  END …如何有效地合并两个data.tables与全外连接,同时处理左侧和右侧滚动最后一次观察前进(LOCF)的缺失值?
现实世界中的应用 -有两个不一定交织交易规则信号表X,Y,控股(稀疏的一段时间内)的信号值.总体目标是定义复合信号,其中Signal.z = Signal.x AND Signal.y
X <- data.table(Instrument=rep("SPX",3)
                , Date=as.IDate(c("2013-11-20","2013-11-22","2013-11-24"))
                , Signal=c(TRUE,FALSE,TRUE), key=c("Instrument", "Date"))
Y <- data.table(Instrument=rep("SPX",3)
                , Date=as.IDate(c("2013-11-21","2013-11-23","2013-11-25"))
                , Signal=c(FALSE,TRUE,FALSE), key=c("Instrument", "Date"))
期望的结果:
   Instrument       Date Signal.x Signal.y Signal.z
1:        SPX 2013-11-20     TRUE       NA       NA
2:        SPX 2013-11-21     TRUE    FALSE    FALSE
3:        SPX 2013-11-22    FALSE    FALSE    FALSE
4:        SPX 2013-11-23    FALSE     TRUE    FALSE
5:        SPX 2013-11-24     TRUE     TRUE     TRUE
6:        SPX 2013-11-25     TRUE    FALSE    FALSE
这是我面临的问题:
例如 :
Realized Xs for job file #123 : A and B
Expected Xs for job file #123 : A and C
Expected Xs for job file #456 : B
预期结果 :
Job_File Realized Expected
-------- -------- --------
123      A        A
123      B        NULL
123      NULL     C
456      NULL     B
当然,123的实现B应该永远不会与456的预期B匹配,因为它们不属于同一个工作文件.
所以,就好像我想在代码上同时完全外部连接和在作业文件id上进行内部连接.
这看起来很奇怪但实际上......非常合乎逻辑.我怎么能这样做呢???
非常感谢您的宝贵帮助!:-)
full-outer-join ×10
sql ×4
mysql ×2
sql-server ×2
case ×1
codeigniter ×1
data.table ×1
hadoop ×1
hive ×1
inner-join ×1
join ×1
null ×1
oracle11g ×1
r ×1
sap-ase ×1
sqlite ×1
subquery ×1
t-sql ×1