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
我有一个包含公司和域的数据库。我的目标是 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