0

以下に示す3つのmysqlテーブルがあります。この場合、はと をtbl_a関連付ける結合テーブルです。非正規化したいtbl_btbl_ctbl_a

tbl_a スキーマ

b_id, c_id, id, x,y,z

tbl_b スキーマ

id, a, b, c

tbl_c スキーマ

id, d, e, f

idのそれぞれについて、とをそれぞれのテーブルの完全なエントリtbl_aに置き換えたいという考えです。b_idc_id

クエリがあります

select a,b,c,d,e,f,x,y,z from tbl_a
INNER JOIN tbl_b on tbl_a.b_id = tbl_b.id
INNER JOIN tbl_c on tbl_a.c_id = tbl_c.id;

しかし、これは のそれぞれに対して 2 つの行になりidますtbl_a

誰かがこれがうまくいかない理由を説明できますか?

4

2 に答える 2

1

tbl_a で ID が重複する可能性はありますか?

クエリは正しいです- http://sqlfiddle.com/#!8/9c666/1を確認してください

CREATE TABLE `tbl_a` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `b_id` int(11) NOT NULL,
  `c_id` int(11) NOT NULL,
  `xyz` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ;

CREATE TABLE `tbl_b` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `abc` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ;

CREATE TABLE `tbl_c` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `def` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ;


INSERT INTO `tbl_b` (`id`, `abc`) VALUES
(1, 'b1'),
(2, 'b2'),
(3, 'b3'),
(4, 'b4');


INSERT INTO `tbl_c` (`id`, `def`) VALUES
(1, 'c1'),
(2, 'c2'),
(3, 'c3');


INSERT INTO `tbl_a` (`b_id`, `c_id`, `xyz`)
SELECT (ABS(CRC32(UUID())) % 4) + 1, (ABS(CRC32(UUID())) % 3) + 1, SUBSTRING(UUID(), 3, 5);

SELECT * FROM tbl_a;

SELECT * FROM tbl_a
INNER JOIN tbl_b on tbl_a.b_id = tbl_b.id
INNER JOIN tbl_c on tbl_a.c_id = tbl_c.id;
于 2013-01-24T13:30:49.113 に答える
0

これはおそらくあなたが望んでいるものではないでしょう。

SELECT a,b,c,d,e,f,x,y,z 
  FROM tbl_a
  LEFT
  JOIN tbl_b 
    ON tbl_a.b_id = tbl_b.id
  LEFT
  JOIN tbl_c 
    ON tbl_a.c_id = tbl_c.id;
于 2013-01-24T13:41:03.270 に答える