我有一个存储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都有该客户端的共同点。
答案 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