0
이 작업을 수행하는 방법이 있습니까? 다른 테이블의 필드에서 테이블 이름을 가져 와서 해당 테이블의 모든 열을 key : val의 한 줄로 압축 할 수있는 쿼리. 쌍. http://sqlfiddle.com/#!2/b0c27테이블을 쿼리하여 필드에서 다른 테이블의 이름을 가져 와서 최종 쿼리 수행
ID FT_ID FT_DATA_ID NAME TABLE DATA
1 1 1 one features_data_one ro_one: A; ro_two: B
2 2 1 two features_data_two rt_two: C; rt_two: D
/****** list of features with the name and the table the data lies in */
CREATE TABLE features (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
`table` VARCHAR(255) NOT NULL
);
INSERT INTO features(name, `table`) VALUES ('one', 'features_data_one');
INSERT INTO features(name, `table`) VALUES ('two', 'features_data_two');
/****** feature one */
CREATE TABLE features_data_one (
id INT AUTO_INCREMENT PRIMARY KEY,
ro_one VARCHAR(20) NOT NULL,
ro_two VARCHAR(20) NOT NULL
);
INSERT INTO features_data_one (ro_one, ro_two) VALUES ('A', 'B');
/****** feature two */
CREATE TABLE features_data_two (
id INT AUTO_INCREMENT PRIMARY KEY,
rt_one VARCHAR(20) NOT NULL,
rt_two VARCHAR(20) NOT NULL
);
INSERT INTO features_data_two (rt_one, rt_two) VALUES ('C', 'D');
/****** association table which links a feature with a feature_id. The feature_id is the id in a specific table. This table is specificed in the feature table. */
CREATE TABLE assoc (
id INT AUTO_INCREMENT PRIMARY KEY,
ft_id INT NOT NULL,
ft_data_id INT NOT NULL
);
INSERT INTO assoc (ft_id, ft_data_id) VALUES (1, 1);
INSERT INTO assoc (ft_id, ft_data_id) VALUES (2, 1);
SELECT *
FROM assoc a
INNER JOIN features as ft ON a.ft_id = ft.id;
hi v.sheldeshov, 이것은 각기 다른 열이있는 100 개의 테이블이있을 수있는 이유 중 하나입니다. – user391986
좋습니다.하지만이 100 개의 테이블을 모두 하나로 병합하는 것이 좋습니다. –
잘 모르겠지만 속성의 값에 따라 조인 할 올바른 tablename을 선택하는 것은 쉽지 않습니다. 5NF http://en.wikipedia.org/wiki/Fifth_normal_form –