2013-02-12 3 views
1

При написании нижеприведенного запроса он жалуется, что столбец «so.id» неизвестен! Следующий запрос отлично работает в MS SQL, но не в MySQL? Как написать вложенный запрос select в MySQL?Как создать вложенный SQL-запрос в MySQL?

Что это за эквивалент?

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 более сложный, чем выше, выше всего лишь упрощенная версия для объяснения вложенных таблиц.

Я также попробовал другие предложения:

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 для запуска для каждой строки родителя.

ОБНОВЛЕНО с ANSWER:

Как бы вы облегчите ниже запрос?

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 –

+0

Извините, но как проблема может быть ОБА, что so.id неизвестно и что запрос запускает бесконечный цикл? –

+0

Обновлено. Как вы создавали в MySQL вложенные операторы select? Как вы запустили другой оператор select с каждой записью родителя? –

ответ

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 был запущен с каждой родительской строкой. –

Смежные вопросы