2013-06-20 84 views
0

如果這看起來很簡單,我會提前表示歉意,因爲我的任務需要在3小時內通過,而且我沒有足夠的時間做一些進一步的研究,因爲我有另一個未決任務今晚提交。我只知道基本的MYSQL命令,而不是這些類型。請幫忙。MySQL從另一個表中查詢參考參數

說,我有兩個表:

________________  _________________ 
    | customers | |  agents  | 
    |________________| |_________________| 
    |(pk)customer id | |(pk) agent_id | 
    |(fk) agent_id | | first_name | 
    | first_name | | last_name | 
    | last_name | |  address  | 
    |________________| |_________________| 

基本上,我只是想知道如何查詢是這樣的:(不正確的術語)

SELECT * FROM customers WHERE agent_id = '(agent_id of Michael Smith from the AGENTS table)'

顯然我只有agent_id的代理,我可以直接調用它,如果我知道什麼代理名稱是基於這樣的id: SELECT * FROM customers WHERE agent_id = '4'

但我怎麼能通過提交代理的名字和姓氏作爲參數來查詢它? (名字和姓氏,因爲代理可以有相同的名字,甚至相同的姓氏)

回答

2

記住你的外鍵不能幫助你建立查詢,你必須告訴數據庫你想在查詢中但是,外鍵可以幫助跨表更加一致地分佈數據)。

您可以在這裏使用JOIN

你可以這樣實現它:

SELECT * 
FROM customers C 
INNER JOIN agents A ON C.agent_id = A.agent_id 
WHERE A.last_name = 'Smith' 
    AND A.first_name = 'Michael'; 
+0

@Bjoem謝謝,順便說一句,我還需要把?它是必需/良好的做法嗎? - 例如:'FROM customers as C' – GitKidd

+0

這兩個工作都很好,因爲無論如何mysql查詢解析器都跳過了'AS'。幾年前我開始離開'AS',也許它更快。我的同事從未抱怨過。所以......基本上,對你來說最好的。 – Bjoern

+0

@GitKidd - WHERE應該更恰當地「WHERE agents.first_name ='Michael'AND A.last_name ='Smith';」 –

0

你可以不用聯接爲好。

select * 
from customers 
where customers.agent_id in (
    select agents.agent_id 
    from agents 
    where agents.first_name = 'Michael' and agents.last_name = 'Smith' 
); 
+0

感謝@Tap,在代碼優化方面,btw加入了比這種方法更好的方法嗎? – GitKidd

+0

@GitKidd - 就優化而言,是的,一個連接幾乎總是優於這樣的子選擇 –

+0

是的,實際上連接將是一個更好的選擇。把這個放在那裏... – Tap