我有问题。我有桌子:
Customer(cid,etc..),
Motorbike(mid, name, etc..)
和表
Rent(rid,cid, mid, check_in, check_out, etc..).
摩托车名称包括品牌(如雅马哈XT660 R,雅马哈R6,本田CBF125R等)
我的任务是找到租用所有雅马哈或铃木摩托车的客户。 我的查询: 选择c.name,m.name,count(c.name) 来自摩托车m,租r,客户c 其中c.cid = r.cid AND r.mid = m.mid和(m.name喜欢' Yamaha%'或m.name喜欢' Suzuki%') c.ime小组
答案 0 :(得分:0)
听起来你应该能够通过一个简单的JOIN
查询来解决它:
SELECT
r.rid, m.name, c.*
FROM
Rent r
JOIN Motorbike m
ON r.mid = m.mid
JOIN Costumer c
ON r.cid = c.cid
WHERE
m.name LIKE 'Yamaha%'
OR m.name LIKE 'Honda%'
ORDER BY
m.name, r.check_in
以上将为所有雅马哈/本田自行车选择租车ID,自行车名称和每个租车的完整客户信息。
如果你想得到一个独特的"租用自行车的客户列表,但不是完整的租赁历史记录,您可以利用GROUP BY
:
SELECT
c.cid, m.name, COUNT(*) AS num_rentals
FROM
Rent r
JOIN Motorbike m
ON r.mid = m.mid
JOIN Costumer c
ON r.cid = c.cid
WHERE
m.name LIKE 'Yamaha%'
OR m.name LIKE 'Honda%'
GROUP BY
c.cid
答案 1 :(得分:0)
试试这个:
SELECT C.*,m.mid,m.name as BikeName,R.check_out,R.check_in
FROM Costumer C JOIN
Rent R ON R.cid=C.cid JOIN
Motorbike M ON R.bid=M.mid
WHERE m.name LIKE 'Yamaha%'
OR m.name LIKE 'Honda%'
答案 2 :(得分:0)
您可以使用group by
获得至少在e Yamaha和至少铃木租用的客户:
select c.*
from Rent r join
Motorbike m
on r.mid = m.mid join
Customer c
on r.cid = c.cid
group by c.id
having sum(m.name LIKE 'Yamaha%') > 0 and
sum(m.name LIKE 'Honda%') > 0;
having
子句中的每个条件都计算给定类型的摩托车数量。你至少想要其中一个。