[SQL] 1 열은 쉼표 갖는 경우 조인 테이블 SQL
SQL1 열은 쉼표 갖는 경우 조인 테이블 SQL
내가 "기능 1"을 검색 할 때 어떻게 모든 사용자 이름을 얻을 수 있습니다 .FOR 예 : 나는 tblC에서 1,2 내가 위의 결과를 얻기 위해 사용한다 new1.What 쿼리를 가지고 ROW1 1,2입니다 아이디로 A와 B를 얻을해야합니까? 정말 사전에 어떤 help.Thanks을 주셔서 감사합니다. http://sqlfiddle.com/#!2/1ab8e/2
CREATE TABLE if not exists tblA
(
id int(11) NOT NULL auto_increment ,
user varchar(255),
category int(255),
PRIMARY KEY (id)
);
CREATE TABLE if not exists tblB
(
id int(11) NOT NULL auto_increment ,
username varchar(255),
userid int(255),
PRIMARY KEY (id)
);
CREATE TABLE if not exists tblC
(
id int(11) NOT NULL auto_increment ,
nname varchar(255),
userids varchar(255),
PRIMARY KEY (id)
);
INSERT INTO tblA (user, category ) VALUES
('1', '1'),
('1', '2'),
('1', '3'),
('1', '1'),
('2', '1'),
('2', '1'),
('2', '1'),
('2', '1'),
('3', '1'),
('2', '1'),
('4', '1'),
('4', '1'),
('2', '1');
INSERT INTO tblB (userid, username ) VALUES
('1', 'A'),
('2', 'B'),
('3', 'C'),
('4', 'D'),
('5', 'E');
INSERT INTO tblC (id, nname,userids ) VALUES
('1', 'new1','1,2'),
('2', 'new2','1,3'),
('3', 'new3','1,4'),
('4', 'new4','3,2'),
('5', 'new5','5,2');
쿼리 지금까지 :
select * where nname="new1" from tblC
CROSS JOIN tblB
ON tblB.userid=(SELECT userids FROM substr(tblC.userids,','))
해결법
-
==============================
1.당신은 정말 tablec에 저장된 각각의 관계가 새로운 접합 테이블에 저장되지만 쉼표로 구분 된 목록없는 각 행은 C와 하나의 ID를 개최한다 데이터베이스 정규화보고 처음 정상화 당신의 구조를 접합 테이블을 추가하고 tablec에서 관계를 유지해야한다 당신이 당신의 스키마를 변경할 수없는 경우 행마다 사용자 ID, 당신은 세트의 값을 찾기 위해 FIND_IN_SET 사용할 수 있습니다
당신은 정말 tablec에 저장된 각각의 관계가 새로운 접합 테이블에 저장되지만 쉼표로 구분 된 목록없는 각 행은 C와 하나의 ID를 개최한다 데이터베이스 정규화보고 처음 정상화 당신의 구조를 접합 테이블을 추가하고 tablec에서 관계를 유지해야한다 당신이 당신의 스키마를 변경할 수없는 경우 행마다 사용자 ID, 당신은 세트의 값을 찾기 위해 FIND_IN_SET 사용할 수 있습니다
select * from tblC c JOIN tblB b ON (find_in_set(b.userid,c.userids) > 0) where c.nname="new1"
데모보기
정상화 스키마 편집
나는 당신의 tblC에서 사용자 ID 열을 제거하고 2 열이가 tblC에 대한 저장소 사용자 관계 사용자에게 tblC의 ID 열 및 두 번째 사용자 ID와 관련된 것입니다 C_ID로 대신 내가 tblC_user로 새로운 접합 테이블을 만든이 tblC 샘플 스키마를 참조
CREATE TABLE if not exists tblC ( id int(11) NOT NULL auto_increment , nname varchar(255), PRIMARY KEY (id) ); INSERT INTO tblC (id, nname) VALUES ('1', 'new1'), ('2', 'new2'), ('3', 'new3'), ('4', 'new4'), ('5', 'new5');
그리고 여기 tblC_user 같은 접합 테이블
CREATE TABLE if not exists tblC_user ( c_id int, userid int ); INSERT INTO tblC_user (c_id,userid) VALUES ('1','1'), ('1','2'), ('2','1'), ('2','3'), ('3','1'), ('3','4'), ('4','3'), ('4','2'), ('5','5'), ('5','2');
만약 통보 만약 저장되지 않은 상기 임의 쉼표 tblC 사용자 각각의 관계는 사용자가 관련 검색 결과 제가 새로운 쿼리가 아래와 같이 것 또한 가입에서 사용한 접합 테이블을 설정, 새로운 행에 저장된 관계를 구분
select * from tblC c join tblC_user cu on(c.id = cu.c_id) join tblB b on (b.userid = cu.userid) where c.nname="new1"
데모 2
이제 쿼리보다 쉽게 계단식 관계를 유지할 수있는 인덱스를 사용하여 최적화 할 수 있습니다
from https://stackoverflow.com/questions/25611999/sql-join-tables-where-1-column-has-comma by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 와 업데이트는 오라클에서 쿼리 가입 (0) | 2020.05.06 |
---|---|
[SQL] 특별한 제외하고, 다른 모든 후에는 null 값을 정렬 (0) | 2020.05.06 |
[SQL] pg_views 쿼리에서 불완전한 정보 [중복] (0) | 2020.05.06 |
[SQL] DB2에 회전식 (0) | 2020.05.06 |
[SQL] 나는 "존재하지 않는 관계 [TABLE]"오류가 계속 (0) | 2020.05.06 |