【问题标题】:MySQL join and subquery from the joinMySQL 连接和来自连接的子查询
【发布时间】:2012-03-29 05:51:11
【问题描述】:

这是my earlier question的后续行动:

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 等。我已经尝试了很多东西,但无法弄清楚。再次感谢。

【问题讨论】:

    标签: sql join subquery


    【解决方案1】:

    试试这个:在最后一个连接之后移动括号) 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';
    

    【讨论】:

    • 知道了!这是最终的语法:SELECT q.unique_id FROM (SELECT s.unique_id, 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 AS 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) AS q WHERE s.page1 = '/path1.html' AND s.page2 = '/path2.html';
    • 基本上,除了“s”需要坚持内部查询并且我将“q”指定为外部查询之外,您的代码可以正常工作。
    猜你喜欢
    • 2010-11-06
    • 2011-11-25
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2020-03-31
    • 2014-11-16
    • 2021-02-10
    相关资源
    最近更新 更多