以下のクエリを書くと、「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