2013-01-24 3 views
0

아래에 3 개의 mysql 테이블이 있습니다. 이 경우 tbl_atbl_btbl_c과 관련된 조인 테이블입니다. 나는 tbl_amysql은 조인 테이블을 비정규 화합니다.

tbl_a 스키마

b_id, c_id, id, x,y,z 

tbl_b 스키마

id, a, b, c 

tbl_c 스키마

id, d, e, f 

아이디어는 tbl_a의 각 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; 

을하지만이 tbl_a의 각 id에 대한 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; 
+0

내 데이터를 다시 확인 하겠지만 그렇게 생각하지는 않았습니다 ... –

+0

데이터 오류였습니다. 감사. –

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;