sql union显示重复项

问题描述 投票:-1回答:5

我想要的形象

enter image description here

我已经尝试过x或y的连接而且它不起作用,即使是小组也没有用。几乎给我结果的是下面的查询

SELECT A.Id ,A.AccNo ,A.Name ,B.Id ,B.AccNo1 ,B.AccNo2 ,B.Name 
   from Table1  as A 
   left outer  join Table2 as B on A.AccNo = B.AccNo1 
union 
 SELECT A.Id ,A.AccNo ,A.Name ,B.Id, B.AccNo1, B.AccNo2, B.Name, 
   from Table1 as A 
   left outer  join Table2 as B on A.AccNo = B.AccNo2

在获得正确的查询之后,我想只显示表之间没有链接的异常,如果重复T1.ID则难以实现

sql join duplicates union having
5个回答
1
投票

你似乎想要一个left join

select t1.*, t2.*
from table1 t1 left join
     table2 t2
     on t1.id in (t2.accno1, t2.accno2);

0
投票

尝试:

SELECT A.Id ,A.AccNo ,A.Name ,B.Id ,B.AccNo1 ,B.AccNo2 ,B.Name 
from Table1  as A 
left outer  join Table2 as B 
ON A.AccNo = (CASE WHEN  A.AccNo = B.AccNo1 THEN B.AccNo1 ELSE B.AccNo2 END)

0
投票

您可以嵌套原始查询,然后使用max aggregate函数进行分组:

SELECT Id ,AccNo ,Name, max(Id2) as Id2, max(Name2) as Name2,
       max(AccNo1) as AccNo1, max(AccNo2) as AccNo2
  FROM
(
  SELECT A.Id ,A.AccNo ,A.Name ,B.Id Id2 ,B.AccNo1 ,B.AccNo2 ,B.Name Name2
     from Table1  as A 
     left outer  join Table2 as B on A.AccNo = B.AccNo1 
  union 
   SELECT A.Id ,A.AccNo ,A.Name ,B.Id Id2, B.AccNo1, B.AccNo2, B.Name Name2
     from Table1 as A 
     left outer  join Table2 as B on A.AccNo = B.AccNo2
) q  
GROUP BY Id ,AccNo ,Name;

SQL Fiddle Demo


0
投票

执行LEFT JOIN以返回table1值以及匹配的table2值(其中t2.accno2 = t1.accno):

select t1.*, t2.*
from table1 t1
left join table2 t2
     on t1.accno = t2.accno2

或者,也许您想要table2值来匹配accno1?

select t1.*, t2.*
from table1 t1
left join table2 t2
     on t1.accno in (t2.accno1, t2.accno2)

0
投票

这样解决:

SELECT
 t1.id,
 t1.accno,
 t1.name,
 (
     SELECT DISTINCT
         id
     FROM
         table2
     WHERE
         accno2 = t1.accno
 ),
 (
     SELECT DISTINCT
         name
     FROM
         table2
     WHERE
         accno2 = t1.accno
 ),
 (
     SELECT DISTINCT
         accno1
     FROM
         table2
     WHERE
         accno2 = t1.accno
 ),
 (
     SELECT DISTINCT
         accno2
     FROM
         table2
     WHERE
         accno2 = t1.accno
 ) FROM
 table1 t1
 LEFT JOIN table2 t2 ON t1.accno = t2.accno1 OR t1.id = t2.id
© www.soinside.com 2019 - 2024. All rights reserved.