2015-11-26 91 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