SQL查询(join,distinct)

时间:2017-05-18 12:14:40

标签: mysql sql join

我对SQL语言很陌生。我有两个表,比如table1和table2,table1有ID和Name列,table2有ID和Accounts列。我需要编写一个查询,显示所有具有相应帐号的唯一名称。基本的例子是:

table1         table2

ID Name        ID Accounts
1  foo         1  2
2  bar         2  10
3  baz         3  4
4  foo         4  2

编辑:自己编造这张桌子。原始表中没有输入。

4 个答案:

答案 0 :(得分:0)

您需要选择left joindistinct。所以,

SELECT DISTINCT  A.Name
                 ,B.Account
     FROM        TableA A
     INNER JOIN  TableB B
                 ON A.ID = B.ID

基本上,这样做需要TableATableB通信ID并创建现在包含IDNameaccount number(您可以通过*更改选择中的列来查看它。 然后,distinct删除重复的行,这就是您要查找的内容。

答案 1 :(得分:0)

mysql加入查询将是: -

select a.Id,a.Name,b.Id,b.Accounts from table1 a ,table2 where a.Id=b.Id
  

加入第一步: - 从两个表中选择字段名称。

     

加入第二步: - 比较基数&将要使用的通用字段名称   比较两个表中的数据。

     

a.Id = b。我会比较两个表格中的ID。

答案 2 :(得分:0)

试试这个:

SELECT table1.Name, table2.Accounts FROM table1 INNER JOIN table2 ON table1.ID=table2.ID;

这会在结果表格中为您提供NameAccounts列。由于我们正在使用INNER JOIN,因此我们只会获得两个表中都具有匹配值的记录。

您可以详细了解JOIN here

答案 3 :(得分:0)

这里的问题是' foo'是否与相应的重复帐户值重复,即使ID是不同的?我通常不相信"不同的"当使用多个列时。虽然可能不必要地复杂,但我会这样做:

with allnames as (
select
t1.name, 
t2.accounts,
rank() over(partition by t1.name, t2.accounts order by rownum) DUPLICATE_RANK
from table1 t1
inner join table2 t2 on t1.ID = t2.ID
)
select
name, 
accounts
from allnames
where DUPLICATE_RANK = 1

这将为您提供所有唯一的名称 - 帐户组合。