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