在编写以下查询时,它抱怨“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