2013-02-12 2 views
1

아래 쿼리를 작성할 때 "so.id"열을 알 수 없다고 불평합니다! 아래 쿼리는 MS SQL에서는 잘 작동하지만 MySQL에서는 제대로 작동하지 않습니다. MySQL에서 중첩 된 select 문을 작성하는 방법?MySQL에서 중첩 SQL 쿼리를 만드는 방법은 무엇입니까?

무엇이 이에 상응합니까?

select so.* 
from smart_objects as so 
    inner join (
     SELECT st.objectid, st.issueid 
     FROM smart_targets as st    
     WHERE st.issueid != 0 
      AND 
      ( (st.objectid = so.id) 
       OR 
       (    
       st.objectid in (
        SELECT sor.parent 
        FROM smart_objectrelations as sor  
        WHERE sor.child = so.id) 
       ) 
      )) as soi 
    on soi.objectid = so.id 
where so.id < 100; 

중첩 된 Select SQL을 기본적으로 사용해야합니다. 내 select 문은 위의 것보다 복잡합니다. 위의 내용은 중첩 테이블에 대해 설명하기위한 단순화 된 버전입니다.

select so.* 
    from smart_objects as so 
     inner join (
      SELECT st.objectid, st.issueid 
      FROM smart_targets as st, smart_objects as so   
      WHERE st.issueid != 0 
       AND 
       ( (st.objectid = so.id) 
        OR 
        (    
        st.objectid in (
         SELECT sor.parent 
         FROM smart_objectrelations as sor  
         WHERE sor.child = so.id) 
        ) 
       )) as soi 
     on soi.objectid = so.id 
    where so.id < 100; 

단순히 중첩 된 SQL 부모의 모든 행에 대해 실행하려는 반면 위의 코드는 끝없는 루프로 전환 :

는 또한 다른 제안을 시도했다.

당신이 아래의 쿼리를 단순화 어떻게 됐어 :

는 ANSWER와 더불어 최신의 것으로 바꾼다?

select so.* 
from smart_objects as so 
    inner join (
     SELECT st.objectid, st.issueid 
     FROM smart_targets as st, smart_objects as so   
     WHERE st.objectid = so.id 
      and st.issueid != 0 
      AND 
      ( (st.objectid = so.id) 
       OR 
       (    
       st.objectid in (
        SELECT sor.parent 
        FROM smart_objectrelations as sor, smart_objects as so  
        WHERE sor.child = so.id) 
       ) 
      ) 
     ) as soi 
    on soi.objectid = so.id 
+0

작동합니다 같아요? 이 바이올린은 MySQL, MS SQL 2008 또는 2012에서 작동하지 않습니다. http://www.sqlfiddle.com/#!3/f32ce/1 –

+0

죄송 합니다만, so.id는 알 수 없으며 쿼리가 무한 루프를 유발합니까? –

+0

업데이트 됨. MySQL에서 중첩 된 select 문을 어떻게 만들었습니까? 부모의 모든 기록으로 다른 select 문을 어떻게 실행 했습니까? –

답변

1

이 시도 : 나는 정말 MS SQL에서 일하고이

select so.* 
    from smart_objects as so 
    inner join (SELECT st.objectid, st.issueid FROM smart_targets as st,smart_objects as so   
     WHERE st.objectid = so.id) as soi 
    on soi.objectid = so.id 
+0

하지만 다른 의미를 지니고 있을까요? 중첩 된 Select를 각 부모 행과 함께 실행하고 싶습니다. –

관련 문제