限定しりとり

こんにちは、ほぼ初心者ですがよろしくお願いします。

sqlite2 で以下のような倉庫テーブルと在庫数テーブルがあったとして、
手順5で、ある品物(item_id = 1)の倉庫ごとの在庫数を取得したいと思っています。
倉庫に結合する在庫データがなくても、
倉庫に対する行を取得できる SQL 文を教えていただけませんでしょうか?

※そもそもテーブルの作り方がおかしいでしょうか?
その辺も含めてアドバイスいただけるとありがたいです。

-- 以下sqlite です

.mode column
.header ON

-- 手順1 倉庫テーブル
CREATE TABLE stock_sites (
id INTEGER NOT NULL PRIMARY KEY ,
name TEXT NOT NULL
);


-- 手順2 在庫テーブル
CREATE TABLE stocks (
id INTEGER NOT NULL PRIMARY KEY ,
stock_site_id INTEGER NOT NULL,
item_id INTEGER NOT NULL,
stock INTEGER NOT NULL,
UNIQUE(stock_site_id, item_id)
);

-- 手順3、倉庫データ
INSERT INTO stock_sites(name) VALUES('site_A');
INSERT INTO stock_sites(name) VALUES('site_B');
INSERT INTO stock_sites(name) VALUES('site_C');

-- 手順4、在庫データ
INSERT INTO stocks(stock_site_id, item_id, stock) VALUES(1,1,10);
INSERT INTO stocks(stock_site_id, item_id, stock) VALUES(2,2,20);

-- 手順5 ある品の倉庫ごとの在庫数を取得したい
SELECT t1.name AS site_name, t2.*
FROM stock_sites AS t1
LEFT JOIN stocks AS t2 ON t1.id = t2.stock_site_id
WHERE t2.item_id = 1
ORDER BY t1.id;

-- 結果
-- site_name  t2.id   t2.stock_site_id t2.item_id t2.stock
-- ---------- ---------- ---------------- ---------- ----------
-- site_A   1      1         1     10

-- 欲しい結果
-- site_name  t2.id   t2.stock_site_id t2.item_id t2.stock
-- ---------- ---------- ---------------- ---------- ----------
-- site_A   1      1         1     10
-- site_B
-- site_C

A 回答 (1件)

こう?



SELECT t1.name AS site_name, t2.*
FROM stock_sites AS t1
LEFT JOIN stocks AS t2 ON t1.id = t2.stock_site_id and t2.item_id = 1
ORDER BY t1.id;
    • good
    • 0
この回答へのお礼

早くに回答いただいていたのに遅くなってすみません。

結合するときに条件を複数付けるんですねぇ。
全然気が付きませんでした。

おかげさまでうまくやれそうです。

ありがとうございます。

お礼日時:2012/07/28 15:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!