2014-01-18 6 views
0

두 테이블 : EventStory - 전자는 이벤트에 대한 정보를 가지고 있으며 후자에는 해당 이벤트의 스토리 텍스트가 있습니다.MySQL의 Nested where 절

내가 할 수있는 모든과 같이 Event에서 브라질을 포함 이벤트의 story_id이 :

SELECT @story_id := `story_id` FROM events 
    WHERE actor_id='Brazil'; 

가 그럼 난 내가 가진 story_id를 사용하여 Story을 조회 할. 내가 어떻게 그럴 수 있니? 어떻게 든 그들을 중첩시킬 수 있습니까?

업데이트 : story_id을 변수 대신 임시 테이블에 저장했습니다. 나는이 솔루션에 어떤 의견을 감사하겠습니다 (새로운 MySQL로, 나는 ... 어떻게 변수 작품 여기 아무 생각이) 그런 다음

SELECT * FROM stories, temp_table 
    WHERE stories.StoryID = temp_table.story_id; 

CREATE TEMPORARY TABLE IF NOT EXISTS temp_table AS (SELECT story_id FROM events 
    WHERE actor_id='Brazil'); 

!

답변

2

당신은 JOIN으로,이 작업을 수행 할 수 있습니다 :

SELECT @story_id := e.`story_id`, s.* FROM events e 
INNER JOIN stories s ON s.StoryId = @story_id 
    WHERE e.actor_id='Brazil'; 

는 그래서 s의 이유 년대와 e 's은 (는) 당신이에서 선택하는지 테이블을 식별 할 수 있습니다. FROM eventsINNER JOIN stories을 사용할 수는 있지만 긴 테이블 이름을 입력하지 않는 구문입니다. 당신은이 작업을 수행 할 수 있습니다 :

SELECT @story_id := events.`story_id`, stories.* FROM events 
INNER JOIN stories ON stories.StoryId = @story_id 
    WHERE events.actor_id='Brazil'; 

그러나, 당신은 아마 알, 그것은 더 이상하지 간단합니다. 이해하기 쉽지만.

+0

'e'와 's'구문에 대해 조금 설명해 주시겠습니까? – Heisenberg

+0

@Anh 필자는 대답을 편집하여 기본적으로 긴 테이블 이름을 입력하지 않아도됩니다. – hichris123

+0

답변 해 주셔서 감사합니다! 그래서 MySQL 변수는 참으로 가치의 벡터를 저장할 수 있습니다. 왜 'SELECT * FROM stories StoryID = @ story_id'라고 할 수 없습니까? – Heisenberg