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

これは非常に複雑であり、不要な手の込んだ回避策です。本来、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 <> '')
于 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 に答える