Sorguda sanal alan

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Sorguda sanal alan

Mesaj gönderen serbek_tr »

S.A. arkadaşlar bu aralar çok soruyorum farkındayım ama değerleri yardımlarınızı mümkünse esirgemeyeceğinizi biliyorum. İnternet üzerinde mysql hızlı olduğu için mecburen kullanmak zorunda kaldım ve henüz tam olarak tanımıyorum.

Sorum şu:
Sorgulama esnasında MSSQL kullandığım projelerde union ile birleştirme yaptığımda eksik alanlar için sanal alan tanımlardım ve convert ile de alan tipini belirtirdim ama mysql de böyle birşey bulamadım şimdi bildiğim kadarı ile mysql in bazı konularda mssql ve firebird e göre eksikleri var. istediğim şey my sql olurmu olmazmı bilmiyorum ama aşağıdaki kod ile derdimi analtabilirim herhalde.

tablo1 alanları tbl1_1(ineteger),tbl1_2(string),tbl1_3(integer) olsun.
tablo2 alanları .......... tbl2_2(string),tbl1_3(integer) olsun.

union ile birleştirmek istersem eksik bir alanım dolayısı ile

Kod: Tümünü seç

Select convert(integer as 0)as tbl2_1,tbl2_2,tbl2_3 from tablo2
union
Select tbl1_1,tbl2_2,tbl1_3 from tablo1
 

convert(integer as 0)tbl2_1 -> şeklinde olmayan bir alanı tanımlardım. mysql de bu nasıl yapılır. Bu arada örneğin navicat ile bu sorguyu yaptığımda hiç bir çevirime gerek kalmadan doğru sonuç veriyor mesela

Kod: Tümünü seç

Select ' ' as tbl2_1,tbl2_2,tbl2_3 from tablo2
union
Select tbl1_1,tbl2_2,tbl1_3 from tablo1
ama kod satırından gönderdiğim bu sorgu alan tiplerinin uyuşmamasından dolayı hata veriyor
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Sorguda sanal alan

Mesaj gönderen vkamadan »

merhaba , aşağıdaki gibi kullanabilirsiniz ,

Kod: Tümünü seç

SELECT INT_ALAN1 , INT_ALAN2 , STR_ALAN1 , STR_ALAN2 FROM TABLO1
UNION
SELECT CAST(0 AS UNSIGNED) AS INT_ALAN1 , INT_ALAN2 , "" AS STR_ALAN1 , STR_ALAN2 FROM TABLO 2
Kolay gelsin..
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Re: Sorguda sanal alan

Mesaj gönderen serbek_tr »

Teşekkür ederim, bu şekilde bir kullanım olduğunu aramalarda öğreniştim ancak bu kullanımda hata ile karşılaştığım için çözüme ulaşamadım, karşılaştığım hatayı söyliyeyim belki daha açıklayıcı olur. "Type mismatch for field 'alan1' expecting: Integer actual:LargInt". Şeklinde bir hata alıyorum.
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Re: Sorguda sanal alan

Mesaj gönderen serbek_tr »

CAST Kullanmama rağmen tip uyuşmazlığı vermesinin nedenini buldum ortada bir bug var(İşin üstadları daha iyi bilir tabi);
Bu sorun MySql den de Navicat ten de kaynaklanabilir. Şimdi alanım int alan internetten baktığım kadarı ile
-2147483648 2147483647
0 4294967295
bu aralıkta bir değer alabiliyor int alan, alan uzunluğu yani length değeri burda 10 olarak görünüyor. Ama navicat ile tanımladığım bir int alana otomatik olarak length uzunluğu 11 veriliyor. Diğer integer alanlarada baktım standart değerler ve navicat değerleri şöyle

TINYINT 3-4
SMALLINT 5-6
MEDIUMINT 8-9
INT 10-11
BIGINT 20-20

yani bir tek bigint bilgisinde navicat in atadığı değerler standart değerler ile uyuşuyor.

Kısacası navicat in atadığı standart 11 değerini 10 yapınca tip uyuşmazlığı problemi düzeldi.
Bu kısa araştırmayı paylaşmak istedim, vkamadan yardımlarınızdan dolayı teşekkür ederim. Anlaşılan mysql ile daha çok problem yaşacağız yada yönetimi yapan programlar ile.
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Sorguda sanal alan

Mesaj gönderen vkamadan »

Merhabalar ,
MySQL de Integer bir alan tanımlarken işaretsiz (UNSIGNED) yani negatif değer almayacak tam sayı şeklinde tanımlanırsa Delphi de LargeInt olarak temsil edilirken, işaretli integer alanlar Delphide Integer olarak görünür, sorguda yer alan CAST(0 AS UNSIGNED) ifadesiyle sorgunuzun döndürdüğü ilgili alan için delphi ortamında dataset içinde karşılayacak alanınızı eğer siz eklediyseniz LargeInt şeklinde tanımlı olması gerekir, sorun bundan kaynaklanır.

Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla