проблема с SQL соединением - PullRequest
0 голосов
/ 28 марта 2011

гип!
У меня есть 2 таблицы. Структура выше:

студенты

 idStudent     name    age    job     code
 1      john    18     student        1
 2      john    19     programmer     1
 3      john    18     developer      2
 4      mark    18     student        3
 5      mark    19     programmer     1

информация о

id     address    tel     code
1      fdsf      00232    1 
2       gffdfd    322     1
 3      dsdd     1833     2 
 4      gffg     43333    3
 5      fff      1933    1

Я хочу получить таблицу со структурой:

   idStudent     name    age    address   tel   code
   1             john    18                     1
   3             john    18                     2
   4              mark    18                   3   

Итак, я хочу получить таблицу с уникальным кодом и все остальные поля, которые должны быть заполнены первыми или последними (для меня это не важно) данными, которые появляются в таблице. Я не хочу дублировать поля кода, это важно для меня.

Ответы [ 2 ]

1 голос
/ 28 марта 2011
select S.IdStudent, MIN(Name) Name, MIN(Age) Age, MIN(Address) Address, MIN(Tel) Tel, MIN(Code) Code
FROM Students S Inner Join Info I  ON S.IDStudent = I.Id
group by S.IdStudent
0 голосов
/ 28 марта 2011

Если все, что вам нужно, это получить информацию в каждой таблице для каждого учащегося, это простой запрос JOIN:

SELECT e.idStudent, e.name, e.age, i.address, i.tel, e.code
FROM students e
INNER JOIN infos i ON e.idEstudent=i.id 

Если вы дублировали информацию, вы можете использовать предложение GROUP BY для полученияинформация сгруппирована и MIN или MAX для получения значений каждого поля, которое вы не группируете.

РЕДАКТИРОВАНИЕ, чтобы учесть комментарий от user599977:

От вашегокомментарий Я полагаю, у вас есть дублированные строки в информации ?, если это так, вы можете сделать что-то вроде:

SELECT e.idStudent, max(e.name), max(e.age), max(i.address), max(i.tel), max(e.code)
FROM students e
INNER JOIN infos i ON e.idEstudent=i.id
GROUP BY e.idStudent

Но я рекомендую вам отфильтровать более предсказуемое поле, например, последнюю введенную запись или что-то подобное.

Например:

SELECT e.idStudent, e.name, e.age, i.address, i.tel, e.code
FROM students e
INNER JOIN infos i ON e.idEstudent=i.id
WHERE i.loadDate= (
    SELECT max(loadDate)
    FROM infos
    WHERE id=e.idStudent
)

Предполагается, что у вас есть столбец с отметкой времени или некоторые данные, которые позволяют вам определить, какая строка является последней, введенной пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...