如何处理两个分离的内连接?

时间:2017-10-27 07:08:46

标签: sql oracle join

我正在做一个查询而且我有点麻烦。这是我的问题:

SELECT u. file_id, u.row_id, u.col005,
       cl.client_id, cl.name
FROM uimp_buf_in u 
INNER JOIN(
SELECT c.client_id, c.name FROM clients c
)cl ON convert(REPLACE(REPLACE(REPLACE(LOWER(cl.name), ' '), '-'),extract_title(cl.name)),'us7ascii')=
       convert(REPLACE(REPLACE(REPLACE(LOWER(u.col005), ' '), '-'),extract_title(u.col005)),'us7ascii') 
INNER JOIN(
SELECT us.idusr, us.full_name FROM USERS us
)us ON convert(REPLACE(REPLACE(REPLACE(LOWER(us.full_name), ' '), '-'),extract_title(us.full_name)),'us7ascii')=
       convert(REPLACE(REPLACE(REPLACE(LOWER(u.col005), ' '), '-'),extract_title(u.col005)),'us7ascii') 
WHERE u.file_id = 850

有没有办法可以显示第一个内部联接的结果,而第二个内部联接的结果是什么?像两个sepparated比较,但在一个查询中?换句话说,我需要获得第一次加入的结果,然后从第二次获得结果,但没有第一次加入以任何方式影响第二次。

感谢。

1 个答案:

答案 0 :(得分:0)

如果您希望2个查询的结果出现在单个输出中,那么您可能希望使用UNION或UNION ALL

https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htm

我已经开始分离你的代码并将它们合并在一起,但我还没有测试过它。

SELECT
    c.client_id,
    c.name
FROM
    clients c
INNER JOIN
    uimp_buf_in u 
ON  convert(REPLACE(REPLACE(REPLACE(LOWER(cl.name), ' '), '-'),extract_title(cl.name)),'us7ascii')
  = convert(REPLACE(REPLACE(REPLACE(LOWER(u.col005), ' '), '-'),extract_title(u.col005)),'us7ascii')
WHERE
    u.file_id = 850

UNION ALL

SELECT
    us.idusr,
    us.full_name
FROM
    USERS us
INNER JOIN
    uimp_buf_in u
ON  convert(REPLACE(REPLACE(REPLACE(LOWER(us.full_name), ' '), '-'),extract_title(us.full_name)),'us7ascii')
  = convert(REPLACE(REPLACE(REPLACE(LOWER(u.col005), ' '), '-'),extract_title(u.col005)),'us7ascii')
WHERE
    u.file_id = 850