2013-02-12 65 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; 

我需要內部連接嵌套選擇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來爲母公司的每一行運行。

已更新與答案:

您是如何簡化下面的查詢?

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

難道真的在MS SQL工作?這個小提琴在MySQL和MS SQL 2008或者2012中都不起作用:http://www.sqlfiddle.com/#!3/f32ce/1 – 2013-02-12 08:48:19

+0

對不起,但是如何解決這個問題,so.id是未知的,而且查詢觸發無限循環? – 2013-02-12 08:52:47

+0

已更新。你怎麼在MySQL中創建嵌套的select語句?你如何用父母的每條記錄運行另一條select語句? – 2013-02-12 08:56:07

回答

1

試試這個:我想這應該工作

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與每個父行一起運行。 – 2013-02-12 08:46:50