Как возвращать дополнительного NULL в полях, когда join возвращает более одного результата?

У меня есть следующая база данных

create database if not exists db_join;
use db_join;

create table r1(nombre varchar(20),apellido varchar(20));
create table r2(apellido varchar(20),sexo char(1));
create table r3(apellido varchar(20), email varchar(20));

insert into r1 values('Juan','Martinez'),('Rosa','Perez'),('Omar',NULL),('Maribel','Martinez');
insert into r2 values('Martinez','M'),('Perez','F');
insert into r3 values('Martinez','juan@hotmail.com'),('Perez','NULL');

Я нуждаюсь в том, чтобы сделать консультацию с joins, что позволил мне выбирать имя, пол и e-mail всех людей. До сих пор у меня есть следующая консультация:

SELECT nombre,sexo,email FROM r1 LEFT JOIN r2 ON r1.apellido=r2.apellido LEFT JOIN r3 ON r1.apellido=r3.apellido;

introducir la descripción de la imagen aquí

Проблема, которая у меня есть, состоит в том, что есть два человека, которых зовут Мартинес и связаны, когда это должный быть быть так, так как они - различные люди.

*я не могу создавать новые поля в таблицах.

*не могут быть измененными записи пластины.

*я Могу добавлять чужеземные или первичные ключи.

В результате консультации линия Maribel должна бы быть

Maribel NULL NULL

4
задан 09.11.2019, 21:28
1 ответ

Чтобы начинать консультацию estГЎ хорошо, что estГЎ плохо, он такой, как ты связываешь данные, если ты обращаешь внимание хорошо в R1 juan, и у Maribel есть фамилия MartГ-nez и в R2 они говорят, что все те, у кого была бы фамилия MartГ-nez serГЎn sexo:M, и почта juan

, Так как ты не можешь добавлять поля, приходит в голову мне следующее, что в подмостках R2 и R3, в фамилии ты сохранял как имя, так и фамилию, у тебя осталось бы что-либо подобное:

CREATE TABLE r1 (
  nombre varchar(20) DEFAULT NULL,
  apellido varchar(20) DEFAULT NULL
);

CREATE TABLE r2 (
  apellido varchar(20) DEFAULT NULL,
  sexo char(1) DEFAULT NULL
);

CREATE TABLE r3 (
  apellido varchar(20) DEFAULT NULL,
  email varchar(20) DEFAULT NULL
); 

INSERT INTO r1 (nombre,apellido) VALUES ('Juan', 'Martinez'),('Rosa', 'Perez'),('Omar', NULL),('Maribel', 'Martinez');

INSERT INTO r2 (apellido,sexo) VALUES ('Juan Martinez', 'M'),('Rosa Perez', 'F');

INSERT INTO r3 (apellido,email) VALUES ('Juan Martinez', 'juan@hotmail.com'),('Rosa Perez', 'NULL');

И консультация, чтобы соединять 3, была бы:

SELECT r1.nombre, r1.apellido, r2.sexo, r3.email FROM r1
LEFT JOIN r2 ON r2.apellido = concat(r1.nombre,' ',r1.apellido)
LEFT JOIN r3 ON r3.apellido = r2.apellido

Результат:

introducir la descripción de la imagen aquí

1
ответ дан 01.12.2019, 12:13