如何从其他表中获取具有“相同”名称的所有值的客户

时间:2014-05-18 14:45:11

标签: mysql sql

我有问题。我有桌子:

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小组

3 个答案:

答案 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子句中的每个条件都计算给定类型的摩托车数量。你至少想要其中一个。