【发布时间】:2014-01-07 15:00:26
【问题描述】:
谁能帮我解决以下问题..
我们有 1.左外连接 2.两个右外连接
如何将左右O.J结合起来,产生和上面一样的效果,
我需要重写相同的查询,这是因为我将旧的 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'
我已经用我的基本知识修改了上面的代码,但根本不起作用
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 = X.parent_key
AND Y.project_name = 'TEST'
我没有像原始查询那样获得所需的值。
以下是我的完整原始查询..
SELECT vnd.master_key, vnd.vendor_code
FROM
vnd, vnm, vnd vn2
WHERE vnm.master_key = vnd.parent_key
AND vnm.master_key *= vn2.parent_key
AND vn2.INITIALS =* vnm.DEFAULT_INITIALS
AND vn2.VENDOR_CODE =* vnm.VENDOR_ABBREV
AND vnm.inactive = 0
AND vnd.inactive = 0
AND vnm.project_name = 'TEST'
ORDER BY
lower(vnm.company_name + ' '), lower(vnd.vendor_code) ,lower(vnd.first_name + ' '), lower(vnd.last_name + ' ')
您提供的解决方案有效,但您也可以执行上述解决方案
SELECT X.master_key, X.vendor_code
FROM X
INNER JOIN Y ON X.parent_key = Y.master_key
LEFT OUTER JOIN X AS x2 ON x2.parent_key = Y.master_key AND x2.INITIALS = Y.DEFAULT_INITIALS AND x2.VENDOR_CODE = Y.VENDOR_ABBREV
WHERE Y.project_name = 'TEST'
问候 亚纳基
【问题讨论】:
-
你也可以写表结构吗?
-
对不起,我改了名字是保密的
-
我的问题是如何结合LF.O.J和RG.O.J
-
更新了我对查询的更改..但我仍然无法获得所需的结果..
-
left join 和 right join 做的完全一样,只是逻辑上的观点。为了更容易逻辑选择左或右,但始终相同。个人我只使用左连接。并且不要从 x,y 使用。使用所有可能的连接,如下所示:)
标签: sql sql-server select join outer-join