2011-08-20 78 views
0

對不起,標題有點複雜!在另一個表中返回與另一個表中的一個鏈接值匹配的所有值

我有一個小的搜索無處不在,但我不知道我措辭它有權得到任何結果,或者是我想要做的,甚至有可能...

基本上我想返回表中的所有值都與另一個值中的值匹配。 我有表:

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 

如果我要尋找的只是一個模型的名稱(例如保駕護航。)我想這些結果:

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

因此搜索某個車型將返回所有的車型這是一樣的。

任何人有任何想法?

回答

1

這是你在找什麼?

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

是的,這是!我正在嘗試類似的東西,無處可去......現在我的工作很好,謝謝你的時間。 – penpen

1

您可以使用此查詢。如果有多個具有相同名稱的模型,則此查詢將返回所有與提供的模型名稱對應的所有模型。 PostgreSQL的

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 = ? 

實例(因爲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) 
+0

只要'Models.Model'是唯一的,這就會正常工作,否則,你會得到很多重複的行 – Andomar

+0

@Andomar:如果模型具有不同的'Model_ID'值,那麼這些行按照定義不會重複。如果他們具有相同的'Model_ID',那麼數據庫模式將不正確,因爲它應該是'Models'的主鍵。 ;) – cdhowie

+0

嗨,感謝您的解決方案。我最終使用了Doug Kress',因爲這對我來說更容易理解,但是再次感謝您的答案並花時間幫助我。 – penpen

0

你可以使用子查詢檢索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' 
     ) 
1

試試這個:

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') 
0

根據您查看的表格的大小,在子查詢中獲取信息而不是使用「in」或連接可能會更有效。

select (select car from cars where car_id = m.car_id), model_id, model 
    from models m 
where car_id = (select car_id from from models where model = 'Escort') 
相關問題