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,以便我可以验证限制是否适用于业务人员?我建议您在遇到挑战时运行单独的查询来证明限制有效。