我有3个mysql表显示如下。在这种情况下,tbl_a
是与tbl_b
和tbl_c
相关的联接表。我想反规范化tbl_a
tbl_a schema
b_id, c_id, id, x,y,z
tbl_b架构
id, a, b, c
tbl_c架构
id, d, e, f
我的想法是,对于id
中的每个tbl_a
,我想将b_id
和c_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;
但是这导致id
中的每个tbl_a
都有2行。
有人可以解释为什么这不起作用吗?
答案 0 :(得分: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;
答案 1 :(得分: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;