MySQL 一个 table 上的多个左连接

MySQL multiple left joins on one table

我有一个包含公司和域的数据库。我的目标是 link 所有社交媒体渠道到每个国家的域

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

我的目标是 table 像这样:

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

这可能吗?

您尝试做的事情似乎是合理的...而且我认为这里的问题是您的连接条件中存在一些语法错误。而不是你拥有的,试试:

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

这里的区别在于,我们使用的是 domain [,而不是迭代 dom1、dom2、dom3 的多个版本=28=](别名dom),并根据公司名称将公司table的所有成员加入dom。

我需要明确指出

 LEFT JOIN youtube AS yt
    ON yt.company_name = dom1.company_name 
    AND domain AS dom2

是无效的 SQL 语法,并且您还引用了 dom 的值(例如 dom.domain_name、dom.type 等)而实际上没有 table 别名为 dom。相反,您将 table 引用为 dom1,然后尝试遍历它。我不是 100% 确定,但我认为您正在考虑将这些 dom1、dom2、dom3 等作为对 dom 中行的引用也许是 table。如果是这样,那是没有必要的。您有一个 table(domain,别名为 dom),您希望将其加入公司查找 tables(youtube、twitter、googleplus、facebook)。您不需要 dom1、dom2 等

试试这个

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