2010-03-23 3 views
1

검색어를 작성하는 데 문제가 있습니다. 3 가지 다른 쿼리에서 원하는 것을 할 수 있습니다.파악 도와주세요 (INNER?) JOIN

그러나 조인과 내부 조인에 대한 예제를 읽으면보다 우아한 방법이 있다고 생각합니다. 나는 더 나은 쿼리를 작성하는 내 머리 주위를 감싸 질수 (그러나 싶습니다) 내가 갈 방법을 설명 할 수 있습니다

표 필드 : ID,

표 2 개 필드 ITEM_ID URL, rel_id을

을 FIELD_ID

table1.url (LIKE '%/$ filename')의 마지막 부분을 알고 있는데 table1.id를 선택했습니다. table1.id는 table2.rel_id의 한 항목과 같습니다. 그래서 그것을 얻고 table2.item_id를 선택하십시오. table2에는 동일한 table2.item_id를 가진 다른 항목이 있으며 table2.field_id = '42'가됩니다. 그리고 마지막으로 필요한 값은 table2.field_id가 42 인 table2.rel_id입니다. 가져올 것입니다. 그 값을 $ user_id에 넣으십시오.

조인/내부 조인을 사용하여 하나의 쿼리로 수행 할 수 있습니까? 물론

답변

2
SELECT url, second.rel_id AS user_id 
FROM table1 
INNER JOIN table2 AS first 
    ON table1.id=first.rel_id 
INNER JOIN table2 AS second 
    ON first.item_id=second.rel_id 
WHERE second.field_id='42' 
    AND table1.url LIKE '%/:downloadfile' 
+0

예! 작동합니다. 두 번째 내부 조인에 하나의 작은 변화와 함께, 내 대답을 참조하십시오. 그리고 같은 테이블의 이중 인스턴스를 얻습니다 : P – ugreen

0

는, 무언가 같이해야한다 : 심지어 있도록 별개의 던질 수

SELECT t2_second.rel_id 
FROM table1 t1 
INNER JOIN table2 t2_first ON t1.id = t2_first.rel_id 
INNER JOIN table2 t2_second ON t2_second.rel_id = t1_first.item_it 
WHERE 
    t1.url = '%/:filename' AND 
    t2_second.field_id = 42 

t2_second.rel_id 한 번만 반환됩니다 :

SELECT DISTINCT [...] 

당신이 필요하지 않을 수도 있습니다, 그러나 t2_second.field_id = 42이 각각에 대해 하나의 행만 반환하도록 쿼리를 제한하면 t2_second.rel_id

0

나를 위해 작동하는 쿼리가 Ignacio의 대답을 약간 변경했습니다.

SELECT url, second.rel_id AS user_id 
FROM table1 
INNER JOIN table2 AS first 
    ON table1.id=first.rel_id 
INNER JOIN table2 AS second 
    ON first.item_id=second.item_id 
WHERE second.field_id='42' 
    AND table1.url LIKE '%/:downloadfile' 
관련 문제