SQL Sorgusundan dönen bilgilileri tekrar alma? - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Veri Tabanı (https://www.delphican.com/forumdisplay.php?fid=4) +--- Forum: MS SQL Server (https://www.delphican.com/forumdisplay.php?fid=103) +--- Konu Başlığı: SQL Sorgusundan dönen bilgilileri tekrar alma? (/showthread.php?tid=7173) Sayfalar:
1
2
|
SQL Sorgusundan dönen bilgilileri tekrar alma? - m_ekici - 27-01-2023 Merhaba MS SQL den malzeme listesini (60 bin kayıt içinden) filtreleyerek çekiyorum. Gelmesi 3-4 sn. sürüyor. Gelen bu liste içerisindeki MARKA ları (tek olarak) almam lazım. Bu işlem için aynı queryi yi (Marka alacak şekilde) tekrar gönderiyorum. Bu da toplamda sonucun 7-8 sn. de dönmesine neden oluyor. İlk QUERY ile gelen sonuç içerinden MARKA ları almak veya farklı bir yöntem var mı? İyi Çalışmalar SQL Sorgusundan dönen bilgilileri tekrar alma? - yhackup - 27-01-2023 sadece marka adı lazımsa "Group by Marka" olarak çağırmayı denediniz mi ? SQL Sorgusundan dönen bilgilileri tekrar alma? - COMMANDX - 27-01-2023 SQL Sorgusunda Or yapısı kullanarak Arayacağınız Markaları önce bir memoya aktarıp oradan OR ile birleştirip çoklu listeleme yapmak VAR I:INTEGER; begin DM.uniquery.Close; DM.uniquery.SQL.Clear; DM.uniquery.SQL.Add('SELECT * FROM tablo WHERE '); FOR I := 0 TO MEMO1.Lines.Count-1 DO BEGIN DM.uniquery.SQL.Add(' MARKALAR = '+QUOTEDSTR(MEMO1.Lines.Strings[I])+' OR '); END; DM.uniquery.SQL.Add(' MARKALAR = '+QUOTEDSTR(MEMO1.Lines.Strings[0]) ); DM.uniquery.SQL.Add(' ORDER BY MARKALAR ASC '); // MEMO1.Text:=DM.UNIQUERY.SQL.Text; DM.uniquery.Open; END; Şöyle birşey olması gerek SQL Sorgusundan dönen bilgilileri tekrar alma? - m_ekici - 27-01-2023 Teşekkürler SQL yazmada veya çağırmada problemim yok. İlk gönderdiğim Query den gelen sonucu Cache de tekrar zaman kaybetmeden çağırma yöntemi gibi bir şey var mı onu merak ediyorum. 30 bin sonuç döndüğünde tek tek memoya aktarmak daha uzun sürer. Cvp: SQL Sorgusundan dönen bilgilileri tekrar alma? - hi_selamlar - 27-01-2023 (27-01-2023, Saat: 16:53)m_ekici Adlı Kullanıcıdan Alıntı: Teşekkürler Merhabalar, WITH CTE AS özelliğini kullanabilirsiniz. (common_table_expression) WITH ilkSorgum AS ( SELECT Marka.ID, Marka.MarkaAdi FROM Markalar as Marka ) SELECT DISTINCT MarkaAdi as MarkaAdi FROM ilkSorgum veya WITH ilkSorgum AS ( SELECT Marka.ID, Marka.MarkaAdi FROM Markalar as Marka ) SELECT Count(MarkaAdi) as MarkaSayisi, MarkaAdi FROM ilkSorgum GROUP BY MarkaAdi ÖRNEK > https://dbfiddle.uk/xlS9FY-l Kolay gelsin. Cvp: SQL Sorgusundan dönen bilgilileri tekrar alma? - csunguray - 28-01-2023 (27-01-2023, Saat: 14:49)m_ekici Adlı Kullanıcıdan Alıntı: Merhaba Geçici TABLE kullanabilirsiniz. Geçici tablo oluşturma: SELECT tbl_malzeme.* INTO #GeciciTablo FROM tbl_malzeme WHERE tbl_malzeme.adi like 'a%' Ürünleri çekme: SELECT * from #GeciciTablo Markaları çekme: SELECT marka from #GeciciTablo group by marka İş bitince: DROP TABLE #GeciciTablo Geçici tablolar hakkında: https://www.sqlservertutorial.net/sql-server-basics/sql-server-temporary-tables/ Cvp: SQL Sorgusundan dönen bilgilileri tekrar alma? - bydelphi - 28-01-2023 (27-01-2023, Saat: 14:49)m_ekici Adlı Kullanıcıdan Alıntı: Merhaba Belkide sorunu çözdün ama yine de farklı bir alternatif paylaşayım, şurada dursun. iki kere sunucuya gitme derim, tek sorgulama ile Adoquery birden fazla recordset döndürebiliyor aynı mssql server management studio gibi , tek sorgulama ile 2 sonuç döndür biri detaylı liste diğer gruplanmış marka listen olsun sonra her ikisinide recordset olarak ayrı ayrı alıp kullanabilirsin. daha hızlı sonuç alabilirsin. burada detaylı örnek anlatımı var. https://theroadtodelphi.com/2010/06/17/returning-multiple-datasets-with-ado-and-delphi/ SQL Sorgusundan dönen bilgilileri tekrar alma? - m_ekici - 29-01-2023 Cevap yazan herkese teşekkür ederim. 1. hi_selamlar With CTE AS karışık sorguyu daha kullanılır hale getirmek için güzel bir yöntem, fakat 2. isteği gönderemediğim için işimi çözmedi. süre de çok fark etmiyor. (Bu şekilde kullanımı bilmiyordum, aynı Queryi 1. den farzla kullanım için güzel bir yöntem) 2. bydelphi güzel bi yöntem ama 1. query den dönen sonuçlar içinden gelen bilgileri tekrar sorgulamak istiyorum. aynı sorguyu 2. defa çalıştırdığım için süre aynı oluyor. 3. csunguray ın cevabı işimi çözecek galiba ama sürekli geçici tablo oluşturmanın hafıza yönünden bir sıkıntısı olur mu? Cvp: SQL Sorgusundan dönen bilgilileri tekrar alma? - csunguray - 29-01-2023 (29-01-2023, Saat: 18:51)m_ekici Adlı Kullanıcıdan Alıntı: 3. csunguray ın cevabı işimi çözecek galiba ama sürekli geçici tablo oluşturmanın hafıza yönünden bir sıkıntısı olur mu? Geçici tablolar SQL Server'ın tempdb isimli veritabanında depolanır. Eğer çok büyük geçici tablolar oluşturuyorsanız işiniz bittiğinde bunları silmeyi ihmal etmeyin. Aksi takdirde connection'ı sonlandırdığınızda bunlar otomatik silinecektir. SQL Sorgusundan dönen bilgilileri tekrar alma? - m_ekici - 30-01-2023 #GeciciTablo isminde bir tablo oluşturduğumda tablo aşağıdaki gibi görünüyor. (Ben select i #GeciciTablo olarak kullanabiliyorum) [dbo].[#GeciciTablo________________________________________________________________________________________________________000000000051] bu benim yaptığım bir hatadan mı oluşuyor, yoksa SQL mi bu şekilde isimlendiriyor? |