1

このような2つのmysqlテーブルを取得しました

CREATE  TABLE IF NOT EXISTS tbl1 (
`id` INTEGER(2) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT ,
`name` VARCHAR(20) NOT NULL
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE  TABLE IF NOT EXISTS tbl2 (
`tbl_id` INTEGER(2) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT ,
`id2` INTEGER(2) UNSIGNED NOT NULL ,
`email` VARCHAR(20) NOT NULL ,
FOREIGN KEY (`id2`) REFERENCES tbl1(`id`)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

これはtbl1のサンプルデータです

1   hello
2   world
3   happy
4   end

および tbl2 のサンプル データ

2   1   me@mail
3   2   my@mail
4   4   you@mail

今、2 つのテーブルに参加する名前と電子メールを選択したいと思います。ここにSQLがあります

select name,email from tbl1 t1,tbl2 t2 where t2.id2 = t1.id;

それと私は得ています

hello   me@mail
world   my@mail
end     you@mail

しかし、tbl1のすべての行が必要です

hello   me@mail
world   my@mail
happy   null or nothing or 0
end     you@mail

ここで私は立ち往生しています。どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

3

を使用する必要がありますLEFT JOIN

select name,email 
from tbl1 t1
LEFT JOIN tbl2 t2 
  on t1.id = t2.id2;

SQL Fiddle with Demoを参照してください。

現在のクエリはINNER JOIN、両方のテーブルで一致する行のみを返す を使用しています。は、 に一致する行がない場合でも、のすべてのLEFT JOINレコードを返します。tbl1tbl2

結合構文を学習するのに助けが必要な場合は、ここに結合の視覚的な説明があります

于 2013-01-29T17:24:13.697 に答える