2012-06-22 12 views
1

여러 테이블에서 데이터를 수집하는 쿼리를 작성 중입니다. 한 테이블에서 item_ids을 모두 가져 와서 그 테이블을 기반으로 다른 테이블의 다른 데이터를 수집하여 결과를 빌드하고 싶습니다. 나는 이것이 가능하다는 것을 맹세 할 수 있었다; 그러나 나는 그것이 작동하도록 할 수 없습니다. 다음은 내가하려는 일의 예입니다.MySQL 쿼리/하위 쿼리

SELECT item_id AS mainID, 
(SELECT anotherField 
    FROM anotherTABLE 
    WHERE item_id=mainID) 
FROM theMainTable; 

허용되는 예입니다. 본질적으로 하위 쿼리 내부의 기본 쿼리에서 item_id을 사용해야합니다. 나는 전에 이런 짓을했다는 것을 맹세했지만, 어떻게 기억할 수없는 ...

나는 여분의 프로그래밍 언어가 아닌 쿼리만으로이 작업을 수행하려고합니다. 결국 저장 프로 시저로 설정하고 싶습니다. 고마워요.

UPDATE

은 ... 일했다 조인처럼 모든 도움을 주셔서 감사합니다 보인다. 때문에,

SELECT DISTINCT 
    Q.item_id, Q.timestamp, Q.employee, 
    QA.employeeNotes, Q2.itemDesc, Q2.itemExtraData 
FROM 
    itemLog Q 
LEFT JOIN 
    itemComments QA ON Q.item_id = QA.item_id 
LEFT JOIN 
    itemLog Q2 ON Q.item_id = Q2.item_id AND Q2.type = 'begin' 
WHERE 
    Q.verb = 'itemStatus' 
    AND NOT (QA.employeeNotes IS NULL); 
+2

아니가하는이 – kalpaitch

+0

을 조인을 사용 :

위, 이것은 정말 당신이 대신 조인을 사용 할 경우입니다 가졌어요 너무 많은 것. 내가 그 총을 줄거야 ... – W3BGUY

+1

당신은 내부 조항 중 하나를 그 이후의 절에서 null이 아니길 원한다면 QA로 내부 조인을 사용해야한다. 내 대답을 수락 해 주셔서 고마워요. – Sebas

답변

1
SELECT a.item_id AS mainID, b.anotherField 
FROM theMainTable a 
    INNER JOIN anotherTABLE b ON a.item_id=b.item_id 

를 사용한다 : 여기

는 경우 다른 사람이 내 마지막 쿼리가 이런 일에 실행됩니다 내부 조인은 적절한 최적화 및 테이블 경로를 보장하지만 주 테이블에서 반환되는 각 행에 대해 계산됩니다. 당신이 정말로 다음 중첩 된 쿼리를해야하는 경우

SELECT table_x.id, table_y.another_field 
FROM table_x 
INNER JOIN table_y ON table_x.id = table2.x_id; 
1

당신은 당신이 선택 문에서 하위 쿼리를 사용하지 않아야합니다

SELECT mt.itemID AS mainID, at.anotherField 
FROM theMainTable mt INNER JOIN anotherTABLE at 
ON mt.itemID = at.item_id 
1
SELECT themaintable.item_id AS mainID, 
     anothertable.anotherfield 
FROM themaintable 
     INNER JOIN anothertable 
       ON item_id = mainid; 
1

시도 뭔가 : 당신은 키가 왜

SELECT 
    item_id AS mainID, 
    anotherField 
FROM theMainTable 
INNER JOIN anotherTABLE ON item_id=mainID; 
1

두 테이블을 조인, 즉이다

SELECT item_id AS mainID, 
    (SELECT anotherField 
    FROM anotherTABLE 
    WHERE anotherTABLE.item_id=theMainTable.item_id) AS anotherField 
FROM theMainTable; 

이유는 n ested 쿼리가 작동하지 않는다는 것은 필드가 들어오는 테이블을 정의하지 않아서 열 이름 모호성이 있었기 때문일 수 있습니다. 내가 실제 쿼리 거라고 생각하기 때문에, 내가 가입하지 않은

SELECT theMainTable.mainID, 
     anotherTABLE.anotherField 
FROM theMainTable INNER JOIN anotherTABLE 
ON theMainTable.item_id = anotherTABLE.mainID 
1

수행합니다 :이 같은