2017-09-20 10 views
0

私はmysqlにデータベースを持ち、 'campos_personalizados'という名前のテーブルと 'campo_personalizado_envio'という名前のテーブルを持っています。このsqlクエリを取得できません

私はcampo_personalizadoとvalor_campo_personalizadoで 'envio'が必要です。 campo_personalizadoがvithの値と一致しない場合は、null値を持つ行が必要です。私はこのクエリを実行

 select 
cp.id as id_campo, 
vcp.id as id_valor_campo, 
vcp.valor as valor 
from campo_personalizado cp 
inner join valor_campo_personalizado vcp on cp.id = 
vcp.id_campo_personalizado 
inner join valor_campo_personalizado_envio vcpe on vcp.id = 
vcpe.id_valor_campo_personalizado 
where cp.id_encuesta = 1 

私はこの結果にQuery Result

を得た。しかし、私はこのような何かが必要です。

Query Result Expected

スクリプトデータベース:

CREATE TABLE `encuesta` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`nombre` varchar(45) NOT NULL, 
PRIMARY KEY (`id`) 
); 

CREATE TABLE `envio` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`nombre` varchar(45) NOT NULL, 
`id_encuesta` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
FOREIGN KEY (id_encuesta) REFERENCES encuesta(id) 
); 

CREATE TABLE `envio_encuestado` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`nombre` varchar(45) NOT NULL, 
`id_envio` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
FOREIGN KEY (id_envio) REFERENCES envio(id) 
); 

CREATE TABLE `campo_personalizado` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`nombre` varchar(45) NOT NULL, 
`id_encuesta` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
FOREIGN KEY (id_encuesta) REFERENCES encuesta(id) 
); 

CREATE TABLE `valor_campo_personalizado` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`valor` varchar(45) NOT NULL, 
`id_campo_personalizado` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
FOREIGN KEY (id_campo_personalizado) REFERENCES campo_personalizado(id) 
); 

CREATE TABLE `valor_campo_personalizado_envio` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`id_valor_campo_personalizado` int(11) NOT NULL, 
`id_envio` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
FOREIGN KEY (id_valor_campo_personalizado) REFERENCES 
valor_campo_personalizado(id), 
FOREIGN KEY (id_envio) REFERENCES envio(id) 
); 

INSERT INTO encuesta (nombre) VALUES('encuesta1'); 

INSERT INTO envio (nombre, id_encuesta) VALUES('sin filtros', 1); 
INSERT INTO envio (nombre, id_encuesta) VALUES('valor11', 1); 
INSERT INTO envio (nombre, id_encuesta) VALUES('valor11, valor21', 1); 
INSERT INTO envio (nombre, id_encuesta) VALUES('valor11, valor21, valor31', 1); 

INSERT INTO campo_personalizado (nombre, id_encuesta) VALUES('campo10', 1); 
INSERT INTO campo_personalizado (nombre, id_encuesta) VALUES('campo20', 1); 
INSERT INTO campo_personalizado (nombre, id_encuesta) VALUES('campo30', 1); 

INSERT INTO valor_campo_personalizado (valor, id_campo_personalizado) VALUES('valor11', 1); 
INSERT INTO valor_campo_personalizado (valor, id_campo_personalizado) VALUES('valor12', 1); 
INSERT INTO valor_campo_personalizado (valor, id_campo_personalizado) VALUES('valor21', 2); 
INSERT INTO valor_campo_personalizado (valor, id_campo_personalizado) VALUES('valor22', 2); 
INSERT INTO valor_campo_personalizado (valor, id_campo_personalizado) VALUES('valor31', 3); 
INSERT INTO valor_campo_personalizado (valor, id_campo_personalizado) VALUES('valor32', 3); 

INSERT INTO valor_campo_personalizado (id_valor_campo_personalizado, id_envio) VALUES(1, 2); 
INSERT INTO valor_campo_personalizado (id_valor_campo_personalizado, id_envio) VALUES(1, 3); 
INSERT INTO valor_campo_personalizado (id_valor_campo_personalizado, id_envio) VALUES(3, 3); 
INSERT INTO valor_campo_personalizado (id_valor_campo_personalizado, id_envio) VALUES(1, 4); 
INSERT INTO valor_campo_personalizado (id_valor_campo_personalizado, id_envio) VALUES(3, 4); 
INSERT INTO valor_campo_personalizado (id_valor_campo_personalizado, id_envio) VALUES(5, 4); 

--My sql query is 
select 
cp.id as id_campo, 
vcp.id as id_valor_campo, 
vcp.valor as valor 
from campo_personalizado cp 
inner join valor_campo_personalizado vcp on cp.id = 
vcp.id_campo_personalizado 
inner join valor_campo_personalizado_envio vcpe on vcp.id = 
vcpe.id_valor_campo_personalizado 
where cp.id_encuesta = 1 
+1

画像の代わりにテキストを使用してください。幸福になるでしょう –

答えて

0

私はそれを行うことができます、クエリは以下です

select 
consol1.id_encuesta, 
consol1.id_envio, 
consol1.id_campo, 
consol1.nombre_campo, 
consol2.valor_campo from 
(select 
env.id_encuesta as id_encuesta, 
env.id as id_envio, 
cp.id as id_campo, 
cp.nombre as nombre_campo 
from envio env 
inner join campo_personalizado cp on env.id_encuesta = cp.id_encuesta) 
consol1 
left join (
select 
env.id as id_envio, 
cp.id as id_campo, 
vcp.valor as valor_campo 
from valor_campo_personalizado_envio vcpe 
inner join valor_campo_personalizado vcp on vcp.id = 
vcpe.id_valor_campo_personalizado 
inner join envio env on env.id = vcpe.id_envio 
inner join campo_personalizado cp on cp.id = vcp.id_campo_personalizado and 
cp.id_encuesta = env.id_encuesta 
) consol2 on consol1.id_envio = consol2.id_envio and consol1.id_campo = 
consol2.id_campo 
where consol1.id_encuesta = 1 
order by consol1.id_envio asc, consol1.id_campo asc 

結果クエリ:

id_encuesta id_envio id_campo nombre_campo valor_campo 
1    1   1   campo10   NULL  
1    1   2   campo20   NULL  
1    1   3   campo30   NULL  
1    2   1   campo10   valor11 
1    2   2   campo20   NULL  
1    2   3   campo30   NULL  
1    3   1   campo10   valor11 
1    3   2   campo20   valor21 
1    3   3   campo30   NULL  
1    4   1   campo10   valor11 
1    4   2   campo20   valor21 
1    4   3   campo30   valor31 
0

がこの仕事

select 
cp.id as id_campo, 
vcp.id as id_valor_campo, 
vcp.valor as valor 
from campo_personalizado cp 
left join valor_campo_personalizado vcp on cp.id = 
vcp.id_campo_personalizado 
left join valor_campo_personalizado_envio vcpe on vcp.id = 
vcpe.id_valor_campo_personalizado 
where cp.id_encuesta = 1 
+0

こんにちは、違いはありません。私はnull値を得ることができません –

0

を行う必要があります代わりにinner joinleft joinで試してみてください、あなたが参加代わりEquiiのご campo_personalizadoからすべてのデータを取得したいので、左外部結合を使用してみてください

select 
cp.id as id_campo, 
vcp.id as id_valor_campo, 
vcp.valor as valor 
from campo_personalizado cp 
Left join valor_campo_personalizado vcp on cp.id = 
vcp.id_campo_personalizado 
Left join valor_campo_personalizado_envio vcpe on vcp.id = 
vcpe.id_valor_campo_personalizado 
where cp.id_encuesta = 1 
+0

こんにちは、私は同じ結果を得る –

関連する問題