2017-08-14 7 views
1

テーブル結合中に、MySQLはいつこの機能を使用しますか?MySQLは、テーブル間の結合時に自動的にcoalesce関数を使用しますか?

2つの共通の列を置き換える単一の結果列は、結合操作を使用して と定義されています。

COALESCE(x, y) = (CASE WHEN x IS NOT NULL THEN x ELSE y END) 

https://dev.mysql.com/doc/refman/8.0/en/join.html

:すなわち、2つのT1.Aおよびaは= COALESCE(T1.A、T2.A)として定義されている単一の結合列、 得T2.A、あります

私は関数が何をしているのか知っていますが、join操作中にその関数がいつ使用されるかを知りたいと思います。これはちょうど私には意味がありません!誰か私に例を示すことができますか?

答えて

1

これは、自然結合中の冗長な列消去を参照しており、使用して結合しています。列が表示からどのように除外されるかを記述する。

操作の順序は、上記のセクションで説明しました。

  • まず、両者の共通の列は、彼らが最初の表において

  • 第二の発生順序で、テーブルを接合合体、最初のテーブルに一意の列、順番に、それら彼らは、そのテーブルで発生した順序で、第二のテーブルに

  • 第三に、列のユニークなそのテーブルで発生

T1

| a | b | c | 
| 1 | 1 | 1 | 

T2

| a | b | d | 
| 1 | 1 | 1 | 

をもたらす

SELECT * FROM t1 JOIN t2 USING (b); 

を用いて参加、t1.bが合体される(によるUSING)、最初の表に固有の列、2番目の表の列が続きます。

| b | a | c | a | d | 
| 1 | 1 | 1 | 1 | 1 | 
t1

天然の列(またはむしろ、両方のテーブルから共通の列)、

SELECT * FROM t1 NATURAL JOIN t2; 

をもたらすであろう参加者によってその後、最初のテーブルの一意の列が続く、合体されるのに対し2番目の表に示します。

| a | b | c | d | 
| 1 | 1 | 1 | 1 | 
+0

しかし、関数COALESCE(x、y)は、NULL引数がある場合にのみ有効です。したがって、あなたの例では、最初のテーブルのカラムbがNULL値を持つとどうなりますか? COALESCE(NULL、y)?内部結合は、この行を結果セットから除外します。しかし、左のジョインはNULLを返し、「y」の値は返しません。 – folder

+0

これは、NATURAL JOINとJOIN USINGのコンテキストと、冗長なカラム( 'COALESCE')をどのように削除するのかを書き留めた理由です。 MySQLのドキュメントには、「結合操作が他の結合であれば、結合の結果列は結合された表のすべての列の連結から成り立っています」と説明されています。「内部結合の場合、COALESCE(a。 c1、b.c1)は、両方の列が同じ値を持つため、a.c1またはb.c1と同じです。外部結合(LEFT JOINなど)の場合、2つの列のうちの1つはNULL' – fyrye

+0

になる可能性があります。私の例では、 'b'のレコードの1つがNULLの場合、結果は取得されません。これは、結合の基準が満たされていないためです。 – fyrye

関連する問題