2013-06-20 5 views
0

내가 미리 사과 오늘 밤 제출해야합니다. 난 단지 기본 MYSQL 명령을 알고 이러한 유형이 아닙니다. 도와주세요. 나는 단지이 분명히 (잘못된 측면에서)MySQL의 쿼리

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

: 기본적으로 난 그냥 뭔가를 쿼리하는 방법을 알고 싶습니다

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

:

내가 두 테이블을 가지고 말 내가 에이전트 이름이 같은 ID를 기반으로 알고있는 경우 에이전트의 AGENT_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 감사합니다. btw, 내가 아직 넣어야합니까? 그것은 필수/우수 사례입니까? - 예 : MySQL의 쿼리 파서 어쨌든 AS''을 통해 이동하기 때문에'은 고객 C' – GitKidd

+0

으로 모두가 잘 작동합니다. 나는 여하튼 AS를 몇 년 전으로 되돌려 놓기 시작했다. 제 동료들은 결코 불평하지 않았습니다. 그래서 ... 기본적으로, 당신에게 가장 좋은 것이 무엇이든지. – Bjoern

+0

@GitKidd 일 - WHERE 더 제대로해야한다 "WHERE agents.first_name = '마이클'과 A.last_name = '스미스';" –

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

고맙습니다 @ 탭, 코드 최적화 측면에서 btw,이 방법보다 훨씬 더 나은 접근 방식에 가입입니까? – GitKidd

+0

@GitKidd - 최적화면에서 그렇습니다.이 같은 보조 선택은 거의 항상 우수합니다. –

+0

예, 실제로 조인이 더 나은 옵션이 될 수 있습니다. 이걸 저기에두고 ... – Tap