简体   繁体   English

sql union 显示重复

[英]sql union displays duplicates

image of what I want我想要的图片

在此处输入图片说明

I have tried the join on x or y and it didn't work, even the group by didn't work.我已经尝试在 x 或 y 上加入但它没有用,甚至 group by 也没有用。 What almost gave me the result is the query below几乎给了我结果的是下面的查询

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

After getting the query correct I want to show only the exceptions where there was no link between the tables and its kind of difficult if the T1.ID is repeated获得正确的查询后,我只想显示表之间没有链接的异常,如果重复 T1.ID 则很难

You seem to want a left join :你似乎想要一个left join

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

Try:尝试:

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)

You may nest your original query, and then use max aggregate function with grouping :您可以嵌套原始查询,然后将 max 聚合函数与分组一起使用:

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

Do a LEFT JOIN to return the table1 values along with matching table2 values (where t2.accno2 = t1.accno):执行LEFT JOIN以返回 table1 值以及匹配的 table2 值(其中 t2.accno2 = t1.accno):

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

Or, perhaps you want table2 values for matching accno1's as well?或者,也许您还需要 table2 值来匹配 accno1 的值?

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

It this way to resolve:这样解决:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM