所以我只需要在填写电子邮件字段的情况下加入公司表。
如果有空的电子邮件字段,是否有办法排除公司表加入?
select * from person p left join company c on(substring_index(p.email, '@', -1)=c.website and p.email <> '')
我不能用“where”子句来做,因为我正在加入另一个表,我希望无论如何都加入该表。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:1)
我明白了!灵感闪现,......
select * from person p left join company c on((case when length(p.email)>0 then substring_index(p.email,'@',-1) else "purplepower" end)=c.website)
通过使用“case”子句,我确保只匹配存在的电子邮件值。如果没有,它匹配任意字符串,当然与公司表不匹配。
答案 1 :(得分:0)
这太复杂了,而且没有必要进行精心设计的解决方法。本质上,LEFT JOIN
将尝试加入您指定的列上的另一个表,如果它不能加入它,则该表中的列为NULL 。此外,连接用于根据连接条件从多个表返回列。由于您使用的是左连接,因此无论电子邮件值如何,您都会从 person 表中返回所有行。
由于您未从公司中选择任何内容并使用左连接,因此您的解决方案解决方案查询与以下内容相同:
select * from person p
where p.email <> ''
根据您的评论,工作中还有另一个表格,您可以强制公司拥有一个值:
select * from person p
left join company c on (
substring_index(p.email, '@', -1) = c.website
AND c.website <> '')
答案 2 :(得分:0)
select * from (select * from person where email <> '') p
left join company c
on(substring_index(p.email, '@', -1)=c.website )