我有一个包含公司和域名的数据库。我的目标是将所有社交媒体渠道链接到每个国家/地区的域名
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
我的目标是获得这样的表:
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
这可能吗?
答案 0 :(得分:2)
试试这个
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
答案 1 :(得分:1)
你试图做的事似乎是合理的...我认为这里的问题是你的连接条件中有一些语法错误。而不是你拥有的,尝试:
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。
我需要明确指出
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等。