Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:使用复杂联接选择外部记录_Mysql_Sql_Select_Join - Fatal编程技术网

Mysql SQL:使用复杂联接选择外部记录

Mysql SQL:使用复杂联接选择外部记录,mysql,sql,select,join,Mysql,Sql,Select,Join,我想随机选择一个站点记录,然后获取相关的频道。这是我尝试过的不起作用的东西。请帮忙。谢谢大家! SELECT A.*, B.* FROM ( SELECT companies.company_name, sites.id FROM sites INNER JOIN company_sites ON company_sites.site_id = sites.id INNER JOIN companies ON com

我想随机选择一个站点记录,然后获取相关的频道。这是我尝试过的不起作用的东西。请帮忙。谢谢大家!

    SELECT A.*, B.*
    FROM (
        SELECT companies.company_name, sites.id
        FROM sites
        INNER JOIN company_sites ON company_sites.site_id = sites.id
        INNER JOIN companies ON companies.id = company_sites.company_id
        WHERE sites.active = 1
        AND sites.stage_id = 5
        GROUP BY sites.id
        ORDER BY RAND()
        LIMIT 1
    )A
    JOIN ( 
        SELECT 
        channels.id
        FROM channels 
        WHERE channels.site_id = A.sites_id
    ) B ON 1 = 1 
试试这个:

SELECT just the fields you need
FROM (
    SELECT companies.company_name, sites.id id
    FROM sites
    INNER JOIN company_sites ON company_sites.site_id = sites.id
    INNER JOIN companies ON companies.id = company_sites.company_id
    WHERE sites.active = 1
    AND sites.stage_id = 5
    GROUP BY sites.id
    ORDER BY RAND()
    LIMIT 1
)A
join channels on channels.site_id = id

顺便说一下,如果您只需要每个站点上的频道列表,您可以将它们连接到一个字段中,而不是将它们放在单独的行中。查询将更简单:

    SELECT companies.company_name, sites.id, group_concat(channels.id) as channels
    FROM sites
    INNER JOIN company_sites ON company_sites.site_id = sites.id
    INNER JOIN companies ON companies.id = company_sites.company_id
    inner join channels on channels.site_id = sites.id
    WHERE sites.active = 1
    AND sites.stage_id = 5
    GROUP BY sites.id
    ORDER BY RAND()
    LIMIT 1

1=1的条件是什么?你知道它会产生笛卡尔积吗?这就是我要回答的。不过我认为你不需要限制1。奥普把它放在盒子里subquery@Hayden . . . 问题明确地说要获取站点记录。我想OP只想要一个,够了。最初的问题是,但最初的查询显示它仅限于子查询。看起来这可能有效,但我需要添加一些条件并加入“代码”选择A.site\u id,channels.id AS channels\u id FROM SELECT sites.id AS site\u id FROM sites.active=1和sites.stage\u id=5按站点分组。id按兰德顺序限制1频道上的左连接频道。site\u id=A.site\u id为什么要进行左连接而不是内部连接?你有没有没有没有任何频道的网站?好的,我补充了我的标准,效果很好。非常感谢。我再次对这个社区印象深刻。请再说一件事,我如何添加一行来计算返回的不同site.id,以便我可以验证限制是否适用于业务人员?我建议您在遇到挑战时运行单独的查询来证明限制有效。