从SQL中的2个表中获取数据

时间:2018-07-22 07:56:08

标签: sql

我有一个表,其中包含用户的详细信息(名字,姓氏等),以及第二个表,其中包含每个用户的操作(IP)如何获取与系统的最后100个连接?

谢谢

3 个答案:

答案 0 :(得分:1)

您需要在两个表和Top子句(SQL Server)或Limit子句(Mysql)之间进行联接

select distinct  Top 100 ua.column1,ua.column2 from user_actions ua
inner join users u on ua.user_id = u.id;

对于mysql

select distinct ua.column1,ua.column2 from user_actions ua
    inner join users u on ua.user_id = u.id 
    Limit 100;

答案 1 :(得分:0)

如果使用UserActions表上的FOREIGN KEY将表联接在一起,则可以执行简单的查询:

select * from user_actions
inner join users on user_actions.user_id = users.id;

但是,如果没有联接,则可以在代码中获取所有用户,并遍历每个用户并获取其操作(不确定是否可以在SQL中进行此操作,但可以在PHP等中进行此操作)

答案 2 :(得分:0)

可能是这样,如果可以提供示例数据并且表的数据结构可以给出特定的答案,我就假设需要基本数据。有很多功能,例如density_rank,rank,rownumber或简单的order by子句,您可以使用我刚刚展示的一种方法。

drop table user_action;
drop table user_detail;

create table user_detail(userid NUMBER,username varchar2(100));
create table user_action(userid number,ipaddress varchar2(500),timestmp date);

insert into user_detail values (1,'ABC');
insert into user_detail values (2,'PQR');

insert into user_action values (1,'google.com',sysdate);
insert into user_action values (1,'google.com',sysdate-1);
insert into user_action values (1,'google.com',sysdate-2);

select * from (
  select userid, ipaddress, timestmp, row_number() 
    over (partition by ipaddress order by timestmp desc) rn 
  from user_detail 
  join user_action using (userid)) 
where rn <= 100;

问候 巴努