从另一个表中获取两个用户共有的行

时间:2015-04-16 01:48:30

标签: mysql database

我有一个存储id,firstname,lastname的客户端表。客户端表在“order”表中有行,用于存储id,client_id,user_id和其他列。 我需要的是返回属于user_id 5和user_id 7的客户端,并且仅当两个用户都拥有相同的客户端时才会返回。

这是我到目前为止所做的:

SELECT id, firstname, lastname 
  FROM client 
  WHERE id IN (SELECT client_id FROM order  WHERE user_id IN (5, 7) 
    AND sched_start > date_sub(now(), interval 6 month))

根据某些数据的要求以及我想要实现的目标 我的客户表有以下内容

id  | firstname |  lastname  
1   | John      | Smith    
2   | Sarah     | Jones   
3   | Brad      | Presley

在我的订单表中,我有

id | client_id | user_id  
1  | 2         | 5  
2  | 1         | 5  
3  | 2         | 7

从这个结果中,我想要返回的是Sarah Jones,因为用户ID 5和7都有该客户端的共同点。

2 个答案:

答案 0 :(得分:0)

类似的东西:

select c.id
  from client c
    inner join orders o
      on c.id = o.client_id and o.user_id = 5
    inner join orders o2
      on c.id = o2.client_id and o2.user_id = 7;

将为您提供包含user_id 5和user_id 7的订单的客户。fiddle here

我不确定你的意思

  

并且仅当两个用户都拥有相同的客户端时。

答案 1 :(得分:0)

我试过这个。我希望,它会对你有所帮助。但如果没有,我想,你会得到一些暗示。

SELECT DISTINCT Client.Id, Firstname + ' ' + LastName as Name
FROM CLIENT
INNER JOIN ORDERS ON Client.ID = ORDERS.Client_id
where User_id in(5,7)
and Client_id iN
(SELECT Client_ID
FROM 
(SELECT Client_ID,Count(*) as o
FROM ORDERS
GROUP BY Client_id
HAVING Count(*)>1) as p)

几个描述:因为你说

  

如果两个用户都拥有相同的客户端。

因此,有必要执行以下查询以检查相同的值是否连续出现

SELECT Client_ID,Count(*)
FROM ORDERS
GROUP BY Client_id
HAVING Count(*)>1