1

在编写以下查询时,它抱怨“so.id”列是未知的!下面的查询在 MS SQL 中可以正常工作,但在 MySQL 中不行?如何在 MySQL 中编写嵌套的 select 语句?

它的等价物是什么?

    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 为父级的每一行运行。

更新了答案:

您如何简化以下查询?

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
4

1 回答 1

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
于 2013-02-12T08:31:08.767 回答