首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个表上的MySQL多个左联接

一个表上的MySQL多个左联接
EN

Stack Overflow用户
提问于 2015-01-22 15:09:09
回答 2查看 920关注 0票数 0

我有一个公司和域名的数据库。我的目标是将所有的社交媒体渠道连接到每个国家的领域。

代码语言:javascript
复制
SELECT 
  yt.screen_name,
  tw.screen_name,
  gp.id,
  fb.title,
  dom.domain_name,
  dom.type,
  dom.url
FROM
  domain AS dom1
  LEFT JOIN youtube AS yt
    ON yt.company_name = dom1.company_name 
    AND domain AS dom2
  LEFT JOIN twitter AS tw
    ON tw.company_name = dom2.company_name 
    AND domain AS dom3
  LEFT JOIN googleplus AS gp
    ON gp.company_name = dom3.company_name 
    AND domain AS dom4
  LEFT JOIN facebook AS fb
    ON fb.company_name = dom4.company_name 
WHERE 
  yt.screen_name IS NOT NULL
  OR tw.screen_name IS NOT NULL
  OR gp.id IS NOT NULL
  OR fb.title IS NOT NULL
ORDER BY dom.url

我的目标是得到这样一张桌子:

代码语言:javascript
复制
yt.screen_name | tw.screen_name | gp.id | fb.title | dom.domain_name | dom.type | dom.url
foo             NULL             NULL    NULL       foo.com           website    http://www.foo.com
NULL            foo              NULL    NULL       foo.com           website    http://www.foo.com 
NULL            NULL             0478174 NULL       foo.com           website    http://www.foo.com

这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-22 15:21:51

尝尝这个

代码语言:javascript
复制
SELECT DISTINCT
  yt.screen_name,
  tw.screen_name,
  gp.id,
  fb.title,
  dom1.domain_name,
  dom1.type,
  dom1.url
FROM
  domain AS dom1
  LEFT JOIN youtube AS yt
    ON yt.company_name = dom1.company_name 

  LEFT JOIN twitter AS tw
    ON tw.company_name = dom1.company_name 

  LEFT JOIN googleplus AS gp
    ON gp.company_name = dom1.company_name 

  LEFT JOIN facebook AS fb
    ON fb.company_name = dom1.company_name 
WHERE 
  yt.screen_name IS NOT NULL
  OR tw.screen_name IS NOT NULL
  OR gp.id IS NOT NULL
  OR fb.title IS NOT NULL
ORDER BY dom1.url
票数 2
EN

Stack Overflow用户

发布于 2015-01-22 15:21:14

你想做的事似乎是合理的..。我认为这里的问题是,在连接条件中出现了一些语法错误。而不是你所拥有的,试着:

代码语言:javascript
复制
SELECT 
  yt.screen_name,
  tw.screen_name,
  gp.id,
  fb.title,
  dom.domain_name,
  dom.type,
  dom.url
FROM
  domain AS dom
  LEFT JOIN youtube AS yt
    ON yt.company_name = dom.company_name 
  LEFT JOIN twitter AS tw
    ON tw.company_name = dom.company_name 
  LEFT JOIN googleplus AS gp
    ON gp.company_name = dom.company_name 
  LEFT JOIN facebook AS fb
    ON fb.company_name = dom.company_name 
WHERE 
  yt.screen_name IS NOT NULL
  OR tw.screen_name IS NOT NULL
  OR gp.id IS NOT NULL
  OR fb.title IS NOT NULL
ORDER BY dom.url

这里的不同之处在于,我们没有迭代多个版本的dom1、dom2、dom3,而是使用域表(别名为dom)并根据公司名称将所有的公司表连接到dom。

我需要明确指出

代码语言:javascript
复制
 LEFT JOIN youtube AS yt
    ON yt.company_name = dom1.company_name 
    AND domain AS dom2

不是有效的SQL语法,您还可以引用dom的值(例如dom.domain_name、dom.type等),但实际上没有一个表别名为dom。相反,您将表引用为dom1,然后尝试迭代它。我不是百分之百肯定,但我认为您认为这些dom1、dom2、dom3等可能是对域表中行的引用。如果是这样的话,那是不必要的。您有一个表(域,别名为dom),您希望加入您的公司查找表(youtube,twitter,googleplus,facebook)。你不需要dom1,dom2等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28092103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档