【问题标题】:How can I get customers who have all values of "same" name from other table如何从其他表中获取具有“相同”名称的所有值的客户
【发布时间】:2014-05-18 14:45:10
【问题描述】:

我有问题。我有桌子:

Customer(cid,etc..),
Motorbike(mid, name, etc..) 

和表

Rent(rid,cid, mid, check_in, check_out, etc..).

摩托车名称包括品牌(如 Yamaha XT660 R、Yamaha R6、Honda CBF125R 等)

我的任务是找到租用所有 Yamaha 或 Suzuki 摩托车的客户。 我的查询: 选择 c.name、m.name、count(c.name) 来自摩托车 m,租金 r,客户 c 其中 c.cid = r.cid AND r.mid = m.mid and (m.name like 'Yamaha%' or m.name like 'Suzuki%') 按 c.ime 分组

【问题讨论】:

  • 请展示您为解决此问题而尝试过的查询示例。
  • select c.name, m.name, count(c.name) from motorbike m,rent r,customer c where c.cid = r.cid AND r.mid = m.mid and ( m.name like 'Yamaha%' or m.name like 'Suzuki%') group by c.ime
  • 我还是不明白你在做什么。您想要租用 any yamaha 或 suzuki 的客户吗?您想要只租用一个品牌的客户吗?谁只租了这两个品牌?您想要租用所有可能的 yamaha 车型的客户吗?
  • 我需要在数据库中租用 Yamaha 品牌或 Suzuki 品牌所有摩托车的客户。因此,如果客户租用雅马哈 XT660 和 R6,我希望他能展出。如果客户只租了 R6,我不想要他。

标签: mysql sql


【解决方案1】:

这听起来你应该能够通过简单的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

【讨论】:

  • 我得到相同品牌的租金数量。但是如何仅显示为同一品牌租用所有类型摩托车的人。就像客户 Rendet R6 和 XT660R 我想要他一样。
【解决方案2】:

试试这个:

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%'

【讨论】:

    【解决方案3】:

    您可以使用group by 获得至少在 e Yamaha 和至少在 Suzuki 上租用的客户:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2020-04-16
      相关资源
      最近更新 更多