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 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 に答える