Соединение 2 или более баз данных с результатом 1 столбца - PullRequest
0 голосов
/ 07 июля 2019

у нас работает академическая база данных

столбец табель mata_kuliah

id
nm_mk
kode_mk

значения таблиц mata_kuliah

id   | nm_mk       | kode_mk
1    | algoritma   | TI001
2    | databases   | TI002
3    | java        | TI003
4    | OOP         | TI004
5    | theses      | TI005

столбец табель махасисва

id_mhs
nm_mhs
npm_mhs

значения tabel mahasiswa

id   | nm_mhs      | npm_mhs
1    | Andi        | 18.14.1.0001
2    | Soraya      | 18.14.1.0002
3    | Mumun       | 18.14.1.0003
4    | Dede        | 18.14.1.0004
5    | Udin        | 18.14.1.0005

мы переходим от предыдущего дБ к новому, в результате мы должны вызвать другую таблицу для 1 результата (академический результат)

столбец nilai_lama

id_nilai_lama
id_mk
id_mhs
nilai_mk

столбец nilai_baru

id_nilai_baru
id_mk
id_mhs
nilai_mk

столбец nilai_konversi

id_nilai_konversi
id_mk
npm_mhs
nilai_mk

значения табеля nilai_lama

id_nilai_lama   | id_mk | npm_mhs       | nilai_mk
1               | 1     | 18.14.1.0001  | 3
2               | 1     | 18.14.1.0002  | 4
3               | 1     | 18.14.1.0003  | 3
4               | 1     | 18.14.1.0004  | 3
5               | 1     | 18.14.1.0005  | 4

значения табеля nilai_baru

id_nilai_baru   | id_mk | npm_mhs       | nilai_mk
1               | 2     | 18.14.1.0001  | 3
2               | 2     | 18.14.1.0002  | 4
3               | 2     | 18.14.1.0003  | 3
4               | 2     | 18.14.1.0004  | 3
5               | 2     | 18.14.1.0005  | 4
6               | 1     | 18.14.1.0001  | 4 (same id_mk, npm_mhs but hihger nilai_mk)

значения таблиц nilai_konversi

id_nilai_konversi   | id_mk | npm_mhs       | nilai_mk
1                   | 3     | 18.14.1.0001  | 3
2                   | 3     | 18.14.1.0002  | 4
3                   | 3     | 18.14.1.0003  | 3
4                   | 3     | 18.14.1.0004  | 3
5                   | 3     | 18.14.1.0005  | 4
6                   | 3     | 18.14.1.0003  | 4 (take course twice but diff result)

Запрос

select 
  a.id_mk,
  b.nilai_mk,
  b.npm_mhs 
from 
  mata_kuliah a 
left join 
  (
    (select id_mk,max(nilai_mk),npm_mhs from nilai_lama group by id_mk)
or
    (select id_mk,max(nilai_mk),npm_mhs from nilai_baru group by id_mk)
or
    (select id_mk,max(nilai_mk),npm_mhs from nilai_konversi group by id_mk)
  ) b
on 
  a.id_mk=b.id_mk and npm_mhs=?

ожидаемый результат npm_mhs = 18.14.1.0001

id_mk | nilai_mk | npm_mhs
1     | 4        | 18.14.1.0001 (value in nilai_baru is higher)
2     | 3        | 18.14.1.0001
3     | 3        | 18.14.1.0001

ожидаемый результат npm_mhs = 18.14.1.0003

id_mk | nilai_mk | npm_mhs
1     | 3        | 18.14.1.0003 
2     | 4        | 18.14.1.0003 (has twice result in same tabel)
3     | 3        | 18.14.1.0003

это можно сделать?

1 Ответ

0 голосов
/ 07 июля 2019

Можете ли вы проверить этот запрос?Есть некоторые несоответствия в выводе, учитывая ожидаемый результатНо если я угадаю, что в вашей таблице nilai_baru все значение id_mk равно 2, и вывод для 18.14.1.0003 будет таким, как показано ниже, запрос должен работать для вашего.

1     | 3        | 18.14.1.0003 
2     | 3        | 18.14.1.0003
3     | 4        | 18.14.1.0003 (has twice result in same tabel)

Запрос -

SELECT id_mk, npm_mhs, MAX(nilai_mk)  
FROM
(
    SELECT id_mk, npm_mhs, nilai_mk FROM nilai_lama
    UNION ALL
    SELECT id_mk, npm_mhs, nilai_mk FROM nilai_baru
    UNION ALL
    SELECT id_mk, npm_mhs, nilai_mk FROM nilai_konversi
)A
WHERE A.npm_mhs = '18.14.1.0003'
GROUP BY id_mk,npm_mhs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...