2012-03-29 4 views
0

Это является продолжением к my earlier question:MySQL присоединиться и подзапрос из присоединиться

SELECT s.unique_id, s.counter, s.sequence_length, s.yearmonth, s.mod_date_stamp, 
    pg1.page_url as page1, pg2.page_url as page2, pg3.page_url as page3, 
    pg4.page_url as page4, pg5.page_url as page5 
FROM session s 
    LEFT JOIN sessionpage pg1 ON pg1.unique_id = s.page1 
    LEFT JOIN sessionpage pg2 ON pg2.unique_id = s.page2 
    LEFT JOIN sessionpage pg3 ON pg3.unique_id = s.page3 
    LEFT JOIN sessionpage pg4 ON pg4.unique_id = s.page4 
    LEFT JOIN sessionpage pg5 ON pg5.unique_id = s.page5 

работает отлично, чтобы отобразить всю таблицу. Теперь мне нужно select s.unique_id WHERE page1=/path/to/something.html AND page2=/path/to/somethingelse.html.

Не могу понять, как вернуть только unique_id, не возвращая всю таблицу. Я знаю, что мне нужен вложенный запрос, но я не могу понять синтаксис.

Это должно выглядеть примерно так:

SELECT s.unique_id 
    (SELECT pg1.page_url as page1, pg2.page_url as page2, pg3.page_url as page3, 
    pg4.page_url as page4, pg5.page_url as page5 FROM session201203) s 
    LEFT JOIN sessionpage pg1 ON pg1.unique_id = s.page1 
    LEFT JOIN sessionpage pg2 ON pg2.unique_id = s.page2 
    LEFT JOIN sessionpage pg3 ON pg3.unique_id = s.page3 
    LEFT JOIN sessionpage pg4 ON pg4.unique_id = s.page4 
    LEFT JOIN sessionpage pg5 ON pg5.unique_id = s.page5 
WHERE s.sequence_length = 2 AND s.page1 = '/path1.html' AND s.page2 = '/path2.html'; 

Но этот запрос не потому, что он пытается найти PG1 и т.д., прежде чем он присоединился. Я пробовал кучу вещей и не могу понять. Еще раз спасибо.

ответ

0

Попробуйте это: переместите кронштейн ) s после последнего присоединиться

SELECT s.unique_id 
    FROM (SELECT pg1.page_url as page1, pg2.page_url as page2, pg3.page_url as page3, 
    pg4.page_url as page4, pg5.page_url as page5 FROM session201203 
    LEFT JOIN sessionpage pg1 ON pg1.unique_id = s.page1 
    LEFT JOIN sessionpage pg2 ON pg2.unique_id = s.page2 
    LEFT JOIN sessionpage pg3 ON pg3.unique_id = s.page3 
    LEFT JOIN sessionpage pg4 ON pg4.unique_id = s.page4 
    LEFT JOIN sessionpage pg5 ON pg5.unique_id = s.page5) s 
WHERE s.sequence_length = 2 AND s.page1 = '/path1.html' AND s.page2 = '/path2.html'; 
+0

Понял! Это был последний синтаксис: 'ВЫБОР q.unique_id FROM (SELECT s.unique_id, pg1.page_url как page1, pg2.page_url как page2, pg3.page_url как PAGE3, pg4.page_url как Page4, как pg5.page_url Page5 ОТ session201203 при s- LEFT JOIN sessionpage PG1 ПО pg1.unique_id = s.page1 LEFT JOIN sessionpage PG2 ПО pg2.unique_id = s.page2 LEFT JOIN sessionpage pg3 ПО pg3.unique_id = s.page3 LEFT JOIN sessionpage PG4 ПО pg4.unique_id = s.page4 LEFT JOIN sessionpage pg5 ON pg5.unique_id = s.page5) AS q WHERE s.page1 = '/path1.html' AND s.page2 = '/path2.html'; ' – Zug

+0

В принципе , ваш код работал, за исключением «s», необходимого для того, чтобы придерживаться внутреннего запроса, и я назначил «q» как oute r запрос. – Zug

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