[前][次][番号順一覧][スレッド一覧]

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]