1

因此,只有在填充了电子邮件字段的情况下,我才需要加入公司表。

如果有一个空的电子邮件字段,有没有办法排除公司表连接?

select * from person p left join company c on(substring_index(p.email, '@', -1)=c.website and p.email <> '')

我不能使用“where”子句来做到这一点,因为我正在加入另一个表,并且无论如何我都希望该表加入。

任何帮助将不胜感激,谢谢!

4

3 回答 3

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”子句,我确保只有存在的电子邮件值匹配。如果不是,则它匹配一个当然与公司表不匹配的任意字符串。

于 2013-09-04T06:27:01.633 回答
0

这过于复杂,并且没有必要进行复杂的解决方法。从本质上讲, aLEFT 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 <> '')
于 2013-09-04T06:44:16.007 回答
0
select * from (select * from person where email <> '') p 
  left join company c 
  on(substring_index(p.email, '@', -1)=c.website )
于 2013-09-04T06:57:30.110 回答