join 3 подмостков без дубликатов sql server

У меня есть следующая консультация sql server:

  select  * from 
          MobileUsuario,
          MobileCliente,
          MobileLicencia
      where   
      MobileUsuario.IdCliente=MobileCliente.IdCliente 
      and MobileUsuario.IdCliente=MobileLicencia.IdCliente 
      and MobileLicencia.IdCliente=MobileCliente.IdCliente 

И он возвращает мне следующее:

introducir la descripción de la imagen aquí

Как я делаю, чтобы удалять дубликаты, не будучи должен использовать distinct???

1
задан 07.11.2019, 23:27
3 ответа

Мне кажется, что ты не имеешь повторенные, а различные комбинации линий между различными подмостками. Следовательно, DISTINCT не harГЎ никакое различие.

--Crear datos de prueba
CREATE TABLE MobileCliente(
    IdCliente int,
    NombreCliente varchar(100));
INSERT INTO MobileCliente
VALUES(1, 'Cliente 1')

CREATE TABLE MobileUsuario(
    IdCliente int,
    IdUsuario int,
    NombreUsuario varchar(100));
INSERT INTO MobileUsuario
VALUES(1, 10, 'Usuario 10'),
      (1, 20, 'Usuario 20'),
      (1, 30, 'Usuario 30');

CREATE TABLE MobileLicencia(
    IdCliente int,
    IdLicencia int);
INSERT INTO MobileLicencia
VALUES(1, 100),
      (1, 200),
      (1, 300);

--Consultas sin y con Distinct      
SELECT  * 
FROM MobileUsuario  mu 
JOIN MobileCliente  mc ON mu.IdCliente = mc.IdCliente
JOIN MobileLicencia ml ON mu.IdCliente = ml.IdCliente;

SELECT  DISTINCT * 
FROM MobileUsuario  mu 
JOIN MobileCliente  mc ON mu.IdCliente = mc.IdCliente
JOIN MobileLicencia ml ON mu.IdCliente = ml.IdCliente;

GO
--Descomentar para borrar tablas en area de pruebas
--DROP TABLE MobileCliente, MobileLicencia, MobileUsuario;

, Чтобы мочь решать проблему, ты нуждаешься в том, чтобы определить, как будут связывать их mГєltiples линии того же клиента таблицы пользователей с ними mГєltiples линии того же клиента таблицы лицензий, и которые pasarГЎ, когда Ваш nГєmero он не совпадет. Это уже проблема правил дела, которое ты должен решать перед тем, как просить какую-то soluciГіn в cГіdigo.

Оставил tambiГ©n пример как serГ, - если бы была одна relaciГіn между линиями пользователей и лицензий.

--Crear datos de prueba
CREATE TABLE MobileCliente(
    IdCliente int,
    NombreCliente varchar(100));
INSERT INTO MobileCliente
VALUES(1, 'Cliente 1')

CREATE TABLE MobileUsuario(
    IdCliente int,
    IdUsuario int,
    NombreUsuario varchar(100));
INSERT INTO MobileUsuario
VALUES(1, 10, 'Usuario 10'),
      (1, 20, 'Usuario 20'),
      (1, 30, 'Usuario 30');

CREATE TABLE MobileLicencia(
    IdCliente int,
    IdUsuario int,
    IdLicencia int);
INSERT INTO MobileLicencia
VALUES(1, 10, 100),
      (1, 20, 200),
      (1, 30, 300);

--Consulta con condición adicional.

SELECT  * 
FROM MobileUsuario  mu 
JOIN MobileCliente  mc ON mu.IdCliente = mc.IdCliente
JOIN MobileLicencia ml ON mu.IdCliente = ml.IdCliente 
                      AND mu.IdUsuario = ml.IdUsuario;

GO
--Descomentar para borrar tablas en area de pruebas
--DROP TABLE MobileCliente, MobileLicencia, MobileUsuario;
1
ответ дан 01.12.2019, 12:20

Привет выравнивать ключи каждой таблицы тебе должно бы быть достаточным следующей формы

select  * 
from 
        MobileUsuario,
        MobileCliente,
        MobileLicencia
where
        MobileUsuario.IdCliente=MobileCliente.IdCliente 
        and MobileCliente.IdCliente=MobileLicencia.IdCliente
0
ответ дан 01.12.2019, 12:20

Помни, что в консультации оператор * значит, что ты выбираешь все результаты таблицы или подмостков, когда ты делаешь joins, как это твой случай, не могут воспринять их demГЎs данные о твоей консультации в изображении, которое ты переместил нас, но я почти уверен, что какой-либо из данных отличается между каждым tupla (обычно IDВґs подмостков) и помни, что с единственной различной информацией это новость tupla, поэтому кажись как будто он повторялся, я рекомендую тебе просачиваться ты selecciГіn Гєnicamente по данным, в которых ты нуждаешься:

select   

MobileUsuario.idUsuario,
ModileUsuario.Activo
/* Y cualquier otro atributo de las otras tablas que necesites*/
from 
          MobileUsuario,
          MobileCliente,
          MobileLicencia
      where   
      MobileUsuario.IdCliente=MobileCliente.IdCliente 
      and MobileUsuario.IdCliente=MobileLicencia.IdCliente 
      and MobileLicencia.IdCliente=MobileCliente.IdCliente 
0
ответ дан 01.12.2019, 12:20

Теги

Похожие вопросы