Возврат всех значений в другой таблице, которая соответствует одному связанному значению в другой - PullRequest
0 голосов
/ 20 августа 2011

Извините, название немного запутанное!

У меня был небольшой поиск везде, но я не уверен, что правильно формулирую, чтобы получить какие-либо результаты, или если то, что я хочу сделать, даже возможно ...

В основном я хочу вернуть все значения в таблице, которые соответствуют значению в другой. У меня есть таблицы:

Table "Cars"               Table "Models"

Car_ID    Car              Car_ID    Model_ID    Model
-------------------        ----------------------------
1         Ford             1          14         Mustang
2         Fiat             1          21         Focus
3         Toyota           1          87         Escort
                           2          78         500
                           2          45         Punto
                           3          66         Aygo

И если я ищу только одно название модели (например, Escort), я хочу получить следующие результаты:

Car    Model_ID    Model
------------------------
Ford   14          Mustang
Ford   21          Focus
Ford   87          Escort

Таким образом, поиск модели автомобиля вернет все модели одной и той же марки.

У кого-нибудь есть идеи?

Ответы [ 5 ]

1 голос
/ 20 августа 2011

попробуйте это:

 select c.Car, m.Model_ID, m.Model from Cars c, Models m where c.Car_ID=m.Car_ID 
and Car_ID in (select Car_ID from Models where  Model='Escort')
1 голос
/ 20 августа 2011

Вы можете использовать этот запрос. Если существует несколько моделей с одинаковым именем, этот запрос вернет все модели из всех соответствующих марок указанного имени модели.

SELECT c.Car, m.Model_ID, m.Model

FROM Models AS m_search

INNER JOIN Cars AS c
ON m_search.Car_ID = c.Car_ID

INNER JOIN Models AS m
ON c.Car_ID = m.Car_ID

WHERE m_search.Model = ?

Пример на PostgreSQL (поскольку MySQL не поддерживает WITH):

chris=$ WITH Cars (Car_ID, Car) AS (VALUES
    (1, 'Ford'),
    (2, 'Fiat'),
    (3, 'Toyota')
), Models (Car_ID, Model_ID, Model) AS (VALUES
    (1, 14, 'Mustang'),
    (1, 21, 'Focus'),
    (1, 87, 'Escort'),
    (2, 78, '500'),
    (2, 45, 'Punto'),
    (3, 66, 'Agyo')
)

SELECT c.Car, m.Model_ID, m.Model

FROM Models AS m_search

INNER JOIN Cars AS c
ON m_search.Car_ID = c.Car_ID

INNER JOIN Models AS m
ON c.Car_ID = m.Car_ID

WHERE m_search.Model = 'Escort';

 car  | model_id |  model
------+----------+---------
 Ford |       14 | Mustang
 Ford |       21 | Focus
 Ford |       87 | Escort
(3 rows)
1 голос
/ 20 августа 2011

Это то, что вы ищете?

SELECT c.Car, m.Model_ID, m.Model
FROM Models m
INNER JOIN Cars c ON c.Car_ID = M.Car_ID
WHERE m.Car_ID = (SELECT Car_ID FROM Models WHERE Model = 'Escort');
0 голосов
/ 21 августа 2011

В зависимости от размера таблиц, которые вы просматриваете, может быть более эффективно получать информацию в подзапросе, а не с использованием in или объединений.

0 голосов
/ 20 августа 2011

Вы можете использовать подзапрос для получения Car_ID для модели:

select  *
from    Models m
join    Cars c
on      c.Car_ID = m.Car_ID
where   m.Car_ID = 
        (
        select  Car_ID
        from    Models
        where   Model = 'Mustang'
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...