2015-11-26 249 views
0

我与租车公司的表格,与像Mysql的多个条件中的一个列子查询

Firms | Car 
GD1 | CAR1 
GD1 | CAR2 
GD2 | CAR3 
GD3 | CAR4 

以及其他一个由客户租用的汽车行驶列,就像这样:

Client | Car Rented 
C1  | CAR1 
C1  | CAR2 
C1  | CAR3 
C1  | CAR4 
C2  | CAR4 
C3  | CAR1 
C3  | CAR2 
C4  | CAR1 
C5  | CAR2 

我需要知道租用特定公司所有汽车的所有客户。 是我唯一的输入是该公司的名称(例如GD1) 如果我使用GD1输出应该是这样:

Client 
C1 
C3 

它可能看起来很容易,但我真的有麻烦这一个...

感谢您的时间

回答

1

要知道客户端是否租用所有的汽车从一个特定的公司,你需要知道有多少汽车由公司拥有和多少辆车从该公司租由客户。 要知道有多少汽车由该公司拥有的,你可以通过这个查询:

SELECT  Firms, COUNT(*) AS NUM_OF_CAR 
FROM  FirmTable 
GROUP BY Firms 

而且知道很多汽车如何通过客户端从该公司租来的,你可以通过这个查询得到:

SELECT  Client, Firms, COUNT(*) AS NUM_OF_CAR 
FROM  FirmTable a 
INNER JOIN ClientTable b ON a.Car = b.Car 
GROUP BY Client, Firms 

现在,您需要获得租用所有车辆的客户端,这意味着第一个查询和第二个查询中的NUM_OF_CAR必须与各个公司匹配。 结合这两个查询上面,你可以使用:

SELECT  DISTINCT Client 
FROM  (
      SELECT  Firms, COUNT(*) AS NUM_OF_CAR 
      FROM  FirmTable 
      GROUP BY Firms 
      ) t 
INNER JOIN (
      SELECT  Client, Firms, COUNT(*) AS NUM_OF_CAR 
      FROM  FirmTable a 
      INNER JOIN ClientTable b ON a.Car = b.Car 
      GROUP BY Client, Firms 
      ) u 
ON   t.Firms = u.Firms AND t.NUM_OF_CAR = u.NUM_OF_CAR 
WHERE  t.Firms = 'GD1' 
+0

谢谢,正是我所需要的,也感谢您稍后编辑的两步解释。问候 – Soborno

0

我也是新的MySQL,但你可以试试这个。

SELECT DISTINCT Client from ClientTable where CarRented=(SELECT Car from FirmTable where Firms='GD1'); 
+0

谢谢,但要记住,在这种情况下,子查询将有超过1行,所以你的解决方案不会工作... – Soborno