2015-07-16 6 views
1

Я учусь писать sql joing и написал ниже Query.Query возвращает ту же строку дважды, что и результат

SELECT patient.name, patient.address, patient.CONTACTNUMBER, patient.disease, 
patient.joining FROM patient INNER JOIN add_doctor ON patient.DOCASSIGN = 4534543 

Вот результат я получаю

**NAME ADDRESS  CONTACTNUMBER DISEASE JOINING** 
sdfdvd sdfdfbdfgd 3243453   sdvdvbd 01-JUL-15 
sdfdvd sdfdfbdfgd 3243453   sdvdvbd 01-JUL-15 

Я запутался, почему две одинаковые строки, возвращаемые как мой результат запроса. пожалуйста, дайте мне знать, как я могу это исправить, а также вписатьтся помочь мне понять, почему он печатает ту же строку дважды

Таблица пациента

ID  NAME   DISEASE ADDRESS CONTACTNUMBER DOCASSIGN ROOMASSIGN JOINING DISCHARGE 
5656 sdfdvd  sdvdvbd sdfdfbdfgd  3243453 4534543  General 01-JUL-15 15-JUL-15 
65654 rgdgdgvds sdfdfdgdfdb 1123fdffdbfd 4556767  4545   VIP 08-JUL-15 15-JUL-15 

Доктор Таблица

ID   NAME ADDRESS  EMAIL CONTACT  SPECIALITY SALARY PASSWORD 
4534543 fggfhdfs rgghfgjfdj gfhgfhjg 4365457567 dfsfhgjgkgfk 435435 safgdgd 
4545 aaaaaaaaa dffgdsg  fdfgds 43535  dffssgdhgd  324234 dfdhgggfdh 
+2

включает две таблицы, так что мы можем проверить данные – Sherlock

+1

Обеспечения RDBMS (MySQL, Oracle, SQL-сервер и т.д. ...), выборку данных и структуру таблиц. –

+1

У вас должно быть два ряда в таблице пациентов, где DOCASSIGN имеет значение 4534543. – Matt

ответ

1

В таблице «пациента» вы запрашиваете, содержит как минимум две строки, содержащие записи с одинаковыми значениями для имени, адреса, CONTACTNUMBER, болезни, присоединения. Это проблема целостности данных. Таблица пациентов не должна содержать эти два ряда. Если вы хотите, чтобы показать только одну строку в результате, вы можете сделать это с помощью distinct()

SELECT distinct(patient.name), 
     patient.address, 
     patient.CONTACTNUMBER, 
     patient.disease, 
     patient.joining 
FROM patient INNER JOIN add_doctor 
    ON patient.DOCASSIGN = 4534543 
+0

Привет, Тобиас, Большое спасибо, что это работает потрясающе, как ожидалось. У меня есть небольшой вопрос: 'distinct' будет устранять все повторяющиеся значения, но почему в моем выпуске я получаю дублируемую строку, я имею в виду любой способ без использования отдельных. – user3872094

+0

'DISTINCT' *** НЕ *** функция. Он всегда работает во всех столбцах в списке выбора. Помещение одного столбца в круглые скобки ничего не изменит. Ваш запрос эквивалентен 'select different patient.name, (patient.address), ...' –

1

В TSQL INNER join оценивается в 2 логических фаз

  1. Крест присоединиться
  2. отфильтровать строки которые не удовлетворяют условию фильтра в пункте ON.

Чтобы сказать, если таблица Patient имеет грести как:

NAME ADDRESS  CONTACTNUMBER DISEASE JOINING DOCASSIGN 
dfdvd sdfdfbdfgd 3243453   sdvdvbd 01-JUL-15 4534543 

И таблица add_doctor имеет строки, как:

DOCNAME 
Test 
Test2 

так и для внутреннего соединения первого перекрестное соединение будет сделано с промежуточными результатами как:

Step1: patient Cross JOIN add_doctor 

Это приведет к 1*2 = 2 строк, как:

NAME ADDRESS  CONTACTNUMBER DISEASE JOINING DOCASSIGN DOCNAME 
dfdvd sdfdfbdfgd 3243453   sdvdvbd 01-JUL-15 4534543 Test  
dfdvd sdfdfbdfgd 3243453   sdvdvbd 01-JUL-15 4534543 Test2  

Во второй логической фазе Filerting based on ON пункта, поскольку оба строк квалифицируется условие фильтра

Step2: ON patient.DOCASSIGN = 4534543 

конечный результат в два ряда с повторяющимися данными:

NAME ADDRESS  CONTACTNUMBER DISEASE JOINING 
sdfdvd sdfdfbdfgd 3243453   sdvdvbd 01-JUL-15 
sdfdvd sdfdfbdfgd 3243453   sdvdvbd 01-JUL-15 

Для того чтобы удалить дубликаты данных используйте ключевое слово DISTINCT и перезапишите запрос следующим образом:

SELECT DISTINCT p.name, 
       p.address, 
       p.CONTACTNUMBER, 
       p.disease, 
      p.joining 
FROM patient as p 
INNER JOIN add_doctor a ON p.DOCASSIGN = 4534543 

Вы можете обратиться к различной логической фазе, в которых запрос обрабатывается here...

+0

Привет, Mini, спасибо за ответ. Это не работает. Я получаю ошибку как «ORA-00933: команда SQL не правильно закончен, я использую oracle db – user3872094

Смежные вопросы