Kamis, 24 Oktober 2013

Re: [belajar-access] query left join query yang #Error

kalau a left outer join b berarti ada kemungkinan c1 dan c2 bernilai null. pernyataan nomor 4 jadi error karena c1 dan c2 bisa terisi null yang bukan 0 atau bukan angka.
null dioperasikan dengan apapun pasti null.

sepertinya pemecahan queynya lebih banyak. tidak sekali jalan.


kita analisa kondisi 1:
k1= c1 atau c1 = 0



menurut saya, kita beda memahami persyaratan di atas. pembahasan yang sama identik dengan no 2, penjelasan di atas.




Sebaiknya kita bermain mind map dulu mr���� kid. saya gunakan xmind (http://www.xmind.net/)���� untuk brain storming nya.



kalau demikian maka saya usulkan kid bikin 4 query, lalu di unionkan:
select * from q1
union all
select * from q2
union all
select * from q3
union all
select * from q4

sekarang yang menjadi permasalahan adalah membentuk q3, karena hasilnya cartessian. maksudnya begini:

contoh di tabel a ada data k1: {1,2,3,4,5}
di tabel b nilai c2 {2,3}
maka yang keluar dari query adalah product kartesian {(1,2),(1,3),(2,3),(3,2),(4,2),(4,3),(5,2)(5,3)}
semakin banyak anggota k1 dan c2, maka lipatan hasil query juga semakin besar.
apakah seperti itu yang diinginkan ?


Mudah2an ilustrasi tabel dan brainstorming berupa struktur di atas bisa mudah di pahami.





Regards,
Aksan Kurdin

On 10/23/2013 12:06 PM, nmkid.family@gmail.com wrote:
����

hehehe... ada-ada aja bank Aksan ini...

masalahnya ndak berat kok...


ada q1 (hasil komputasi tertentu) sebagai data kerja

dan q2 (hasil komputasi tertentu) sebagai alat filter


Biasanya untuk memfilter data adalah dengan inner join. Ketika yang diinginkan adalah data yang tidak sesuai kriteria (tidak cocok dengan q2), maka pakai left outer join dan memfilter salah satu kolom q2 yang bernilai NULL


Masalahnya,

from q1 left outer join q2 (bukan tabel to tabel), ketika menampilkan salah satu kolom q2, yang muncul nilai #error semua. Katanya sih karena q2 hasil suatu proses komputasi, yang bisa jadi disananya memang menghasilkan sesuatu yang NULL atau error.

Ketika seluruh kolom q2 jika ditampilkan isinya adalah #error, maka penggunaan klausa where q2.kolX is null jadi tidak memungkinkan.


akhirnya, pada q2 diberi 1 kolom konstanta ber-type string seperti 'Kid' as kolDummy

dan pada query left outer join, bisa menggunakan klausa where berbentuk :

where q2.koldummy is null


Bisa jadi, komputasi penghasil #error ada dalam bagian ON saat me-left outer join-ken yang berbunyi :

on (a.k1=b.c1 or b.c1=0)
and (a.k1<>b.c2 or b.c2=0)


sebagai penjabaran kondisi :

kondisi1 : k1 = c1 atau c1=0
kondisi2 : k1 <> c2 atau c2=0


Kondisi diatas adalah kegiatan memilah data dan mengubah bentuk data (apa ya sebutannya, profiling kali ya)

jadi pada q2 ada kolom c1 dan c2, dimana

1. jika c1 tidak nol maka hanya nilai k1 yang sesuai dengan c1 saja yang diproses menjadi bentuk tertentu sesuai keadaan yang dijabarkan dalam record q2 tersebut.

2. jika c2 tidak nol maka hanya nilai k1 yang selain c2 saja yang diproses menjadi bentuk tertentu sesuai keadaan yang dijabarkan dalam record q2 tersebut.

3. jika c1 dan c2 (keduanya) adalah nol, maka seluruh k1 akan diproses menjadi bentuk tertentu sesuai keadaan yang dijabarkan dalam record q2 tersebut.

4. c1 dan c2 tidak mungkin berisi bukan nol secara bersamaan.


Ketika kolom yang dikondisikan bukan sekedar k1 saja alias ada suatu kombinasi dari beberapa kolom yang membentuk suatu proses tertentu (menjadi karakteristik proses komputasi tertentu), maka INNER JOIN dengan susunan demikian akan menyingkat proses komputasi query -> imho loh ya, soale gak tahu cara memecah jadi banyak query nya gimana.. :(


Nah kadang kala (seperti kasus ini), q2 adalah hasil komputasi tertentu sebagai penjabaran sebuah tabel pemetaan data. Tentu diperlukan alat cek terhadap proses pemetaan data yang dibuat. Dengan diketahui record data yang tidak memenuhi pemetaan data tersebut, maka pemetaan data bisa diperbaiki agar memenuhi seluruh kebutuhan dan record data yang memang seharusnya termanfaatkan jadi benar-benar termanfaatkan (tergali informasinya) dengan mengubah, menambah, menghapus record dalam tabel pemetaan data saja.


tapi, tetap saja masalah utama yang saya utaraken adalah berusaha mendapatkan NULL pada dataset sisi kanan ketika di-left outer join-ken.


Wassalam,

Kid.


---In belajar-access@yahoogroups.com, <belajar-access@yahoogroups.com> wrote:

master ngaku newbie :)
konon beritanya sudah berhasil solved masalah super berat ini , mr.
di share dong :)

aksan kurdin


On 10/19/2013 10:19 PM, nmkid.family@... wrote:
������������������������

Dear All,

newbie mau tanya tentang left join antara 2 buah query di Access.
misal ada query1 isinya : (k1 tidak mungkin 0 atau null)
k1������������������������������������������������ k2
1������������������������������������������������������������������������������������������������ tipeX1
9������������������������������������������������������������������������������������������������ tipeY2
7������������������������������������������������������������������������������������������������ tipeX5
3������������������������������������������������������������������������������������������������ tipeN3
2������������������������������������������������������������������������������������������������ tipeN2
4������������������������������������������������������������������������������������������������ tipeY5

kemudian ada query2 isinya : (c1 atau c2 bisa berisi 0, tetapi tidak mungkin c1 dan c2 berisi selain nol bersamaan)
c1������������������������������������������������������������������������ c2������������������������������������������������������������������������ c3
0������������������������������������������������������������������������������������������������������������������������ 0������������������������������������������������������������������������������������������������������������������������ nilai1
1������������������������������������������������������������������������������������������������������������������������ 0������������������������������������������������������������������������������������������������������������������������ nilai2
3������������������������������������������������������������������������������������������������������������������������ 0������������������������������������������������������������������������������������������������������������������������ nilai3
0������������������������������������������������������������������������������������������������������������������������ 2 ������������������������������������������������������������������������������������������������ nilai4
0������������������������������������������������������������������������������������������������������������������������ 4������������������������������������������������������������������������������������������������������������������������ nilai5

ingin mengambil semua query1 yang tidak sesuai dengan query2 kolom c1 dan c2 dengan kondisi sebagai berikut :
kondisi1 : k1 = c1 atau c1=0
kondisi2 : k1 <> c2 atau c2=0

sudah dicoba query berikut, tetapi yang tidak cocok kok menghasilkan #Error dan bukan NULL :
select a.*
from query1 a
left join query2 b
on (a.k1=b.c1 or b.c1=0)
and (a.k1<>b.c2 or b.c2=0)

sampai disini,
- jika diberi where b.c1 is null malah muncul kotak pesan error
- jika select ditambahkan kolom b.c3, isi kolom c3 menampilkan #Error daripada NULL untuk yang tidak sesuai kedua kondisi.

Adakah bunyi query join lainnya agar kegiatan antara query1 dan query2 tersebut sesuai yang diinginkan ? (mengambil yang NULL atau yang #Error di query2)
Atau MS Access yang saya pakai yang kurang update yak... :(

Makasih atas bantuannya.

Regards,
Kid.



Tidak ada komentar:

Posting Komentar