mysql:7437
From: Shinya Kawaji <Shinya Kawaji <kawaji@xxxxxxxxxx>>
Date: Thu, 10 Apr 2003 05:27:57 +0900
Subject: [mysql 07437] Re: JOIN を含む SQL 文(長文すみません)
かわじ、です。 LEFT JOIN の話だけ。 > 2.|order_sales_id|order_sales_num|sales_price|item_name|の時、 > select order_sales_id, order_sales_num, sales_price, item_name from > m_item LEFT JOIN t_order_sales_detail USING (item_id) > (これは、だめでした?) 「だめ」っていうのは、「売れていない商品も表示されてしまう」という意味で しょうか? もしそうでしたら、 select order_sales_id, order_sales_num, sales_price, item_name from m_item LEFT JOIN t_order_sales_detail USING (item_id) where order_sales_id is not null; として、明示的に売れていない商品を省くか、もしくは select order_sales_id, order_sales_num, sales_price, item_name from t_order_sales_detail LEFT JOIN m_item USING (item_id); とすれば良いと思います(後者の方が直感的でしょう)。 FROM a INNNER JOIN b (= FROM a,b) は、a と b の全ての行数を掛け合わせま すが(すなわち結果の行数は、a の行数 * b の行数)、 FROM a LEFT JOIN b (プラス、on や using の条件式) は、 a の各行に対する条件式に合う b の各行を掛け合わせますので(条件に合わな い場合は b の部分が NULL になる)、結果の行数は少なくとも a の行数以上 になります。 mysql> select * from a; -- 3 行のテーブル +------+-------+ | id | a_val | +------+-------+ | 1 | a | | 2 | b | | 3 | c | +------+-------+ 3 rows in set (0.00 sec) mysql> select * from b; -- 4 行のテーブル +------+-------+ | id | b_val | +------+-------+ | 2 | x | | 2 | y | | 3 | z | | 4 | v | +------+-------+ 4 rows in set (0.00 sec) mysql> select * from a innner join b; -- 全てを掛け合わす(結果は 3*4=12 行) -- テーブルを逆順にしても(順序を除いては)結果は変わらない +------+-------+------+-------+ | id | a_val | id | b_val | +------+-------+------+-------+ | 1 | a | 2 | x | | 2 | b | 2 | x | | 3 | c | 2 | x | | 1 | a | 2 | y | | 2 | b | 2 | y | | 3 | c | 2 | y | | 1 | a | 3 | z | | 2 | b | 3 | z | | 3 | c | 3 | z | | 1 | a | 4 | v | | 2 | b | 4 | v | | 3 | c | 4 | v | +------+-------+------+-------+ 12 rows in set (0.00 sec) mysql> select * from a left join b using (id); -- aの各行について条件にあったbの各行を掛け合わす(無ければ NULL) -- 結果は 3 行以上 12 行未満 +------+-------+------+-------+ | id | a_val | id | b_val | +------+-------+------+-------+ | 1 | a | NULL | NULL | | 2 | b | 2 | x | | 2 | b | 2 | y | | 3 | c | 3 | z | +------+-------+------+-------+ 4 rows in set (0.00 sec) mysql> select * from b left join a using (id); -- 上記とは逆に掛け合わせる(b が主体) -- 結果は 4 行以上 12 行未満 +------+-------+------+-------+ | id | b_val | id | a_val | +------+-------+------+-------+ | 2 | x | 2 | b | | 2 | y | 2 | b | | 3 | z | 3 | c | | 4 | v | NULL | NULL | +------+-------+------+-------+ 4 rows in set (0.00 sec) よけい混乱したら、すみません。
7435 2003-04-10 02:23 [tamura <zai91210@xxx] JOIN を含む SQL 文(長文すみません) 7436 2003-04-10 03:02 ┣["Kondo Tatsuya" <kon] 7440 2003-04-10 13:33 ┃┗[tamura <zai91210@xxx] 7441 2003-04-10 13:42 ┃ ┗[Koji KUSANAGI <kusan] Off-topic (was: Re: JOIN を含む SQL 文) -> 7437 2003-04-10 05:27 ┣[Shinya Kawaji <kawaj] 7444 2003-04-10 15:00 ┃┗["Kondo Tatsuya" <kon] 7445 2003-04-10 15:15 ┃ ┣[Michiaki Negoro <m-n] 7448 2003-04-10 15:30 ┃ ┗[<enim2@xxxxxxxxxx> ] 7470 2003-04-11 03:27 ┃ ┗["Kondo Tatsuya" <kon] 7471 2003-04-11 03:49 ┃ ┣[Tomohiro 'Tomo-p' KA] 7472 2003-04-11 04:10 ┃ ┗[Shinya Kawaji <kawaj] 7474 2003-04-11 14:45 ┃ ┗["Kondo Tatsuya" <kon] 7475 2003-04-11 18:27 ┃ ┗[<enim2@xxxxxxxxxx> ] 7478 2003-04-12 02:36 ┃ ┗["Kondo Tatsuya" <kon] 7438 2003-04-10 11:14 ┗[UNO Shintaro <uno@xx]