Freelance Project Requests info@CodeDocu.de Software Development in C# WPF Asp.Net Core Vba Excel Word SQL-Server EF Linq, UWP Net
#

Aus dem vorigen Beispiel hatte sich eine Datenmenge


use Rue25

use Rue25
SELECT TOP 100 dsDetails.*
FROM (

SELECT tblDetails.* FROM (
SELECT Dataset_00.IDDetail FROM (

SELECT tblWeb_Details.IDDetail
FROM tblWeb_Details
INNER JOIN tblSYS_Word_References
ON tblSYS_Word_References.IDRecordset =
tblWeb_Details.IDDetail
INNER JOIN tblSYS_Words
ON tblSYS_Word_References.IDWord = tblSYS_Words.IDWord
AND tblSYS_Words.[Word] LIKE 'Datei'
) AS Dataset_00
INNER JOIN tblSYS_Word_References
ON tblSYS_Word_References.IDRecordset =
Dataset_00.IDDetail
INNER JOIN tblSYS_Words
ON tblSYS_Word_References.IDWord = tblSYS_Words.IDWord
AND tblSYS_Words.[Word] LIKE 'oder'
) AS Dataset_01
INNER JOIN tblWeb_Details AS tblDetails
ON Dataset_01.IDDetail = tblDetails.IDDetail
)
AS dsDetails


Bei 3 geschachtelten Abfragen sieht das so aus


SELECT TOP 100 dsDetails.IDDetail,dsDetails.IDArea,dsDetails.IDFolder,dsDetails.Title0,dsDetails.Title1 ,Left(dsDetails.Text0,1000) AS sText0,Left(dsDetails.Text1,1000) AS sText1 ,'' AS Thumbnail_URL,'' AS sTitle,'' AS sText,'' AS sTitleURL ,dsDetails.nVisits,dsDetails.dtCreated, '' AS sDateCreated
FROM (
SELECT tblDetails.* FROM (
SELECT Dataset_01.IDDetail FROM (
SELECT Dataset_00.IDDetail FROM (

SELECT IDDetail
FROM tblWeb_Details
INNER JOIN tblSYS_Word_References
ON tblSYS_Word_References.IDRecordset =
tblWeb_Details.IDDetail
INNER JOIN tblSYS_Words
ON tblSYS_Word_References.IDWord = tblSYS_Words.IDWord
AND tblSYS_Words.[Word] LIKE 'Datei'
) AS Dataset_00
INNER JOIN tblSYS_Word_References
ON tblSYS_Word_References.IDRecordset =
Dataset_00.IDDetail
INNER JOIN tblSYS_Words
ON tblSYS_Word_References.IDWord = tblSYS_Words.IDWord
AND tblSYS_Words.[Word] LIKE 'oder'
) AS Dataset_01
INNER JOIN tblSYS_Word_References
ON tblSYS_Word_References.IDRecordset =
Dataset_01.IDDetail
INNER JOIN tblSYS_Words
ON tblSYS_Word_References.IDWord = tblSYS_Words.IDWord
AND tblSYS_Words.[Word] LIKE 'Auswahl'
) AS Dataset_02
INNER JOIN tblWeb_Details AS tblDetails
ON Dataset_02.IDDetail = tblDetails.IDDetail
) AS dsDetails



Folgend der Code in vb.net um eine solche Struktur dynamisch zur Laufzeit zu erstellen
Der folgnede Code macht als beispiel folgendes:
Er erstellt eine n-fache Verschachtelung von Abfragen und bindet am Schluß einer Detail-Tabelle an die oberste Box an.
Dadurch erhält man eine geschachtelte Gesamtabfrage mit Detail-Feldern.
Die Schachtelung erfolgt durch einen Text.Split() in einzelne Worte. Was soviel heißt wie eine Text wird in soviele Worte zerlegt wie vorhanden sind und anschliessend wird immer eine Suchabfrage auf basis der vorigen Suchabfrage geschachtelt.
Im Prinzip wenden das alle Suchmaschinen und Volltext-Suchmaschinen als Suchalgorythmus an.
Zusätzlich wird bei Google, Yahoo und Bing noch eine Sub-Text Abfrage geschachtelt.

'< SQL erstellen >
Dim sSQL As String = "SELECT TOP 100 dsDetails.IDDetail,dsDetails.IDArea,dsDetails.IDFolder,dsDetails.Title0,dsDetails.Title1"
sSQL &= " ,Left(dsDetails.Text0,1000) AS sText0,Left(dsDetails.Text1,1000) AS sText1"
sSQL &= " ,'' AS Thumbnail_URL,'' AS sTitle,'' AS sText,'' AS sTitleURL "
sSQL &= " ,dsDetails.nVisits,dsDetails.dtCreated, '' AS sDateCreated"
If Not _Suche Like "" Then
'--< mit Suche >--
Dim sSuchBoxes As String = ""
Dim sWord As String
Dim arrWords() As String = _Suche.Split(" ")
For iWord As Integer = 0 To arrWords.Length - 1
sWord = arrWords(iWord)
If iWord = arrWords.Length - 1 Then
'< Abschluss Box >
sSuchBoxes = " SELECT tblDetails.* FROM ( " & vbCrLf & sSuchBoxes
'</ Abschluss Box >
Else
'< Box-Header >
sSuchBoxes = " SELECT Dataset_" & Format((iWord), "00") & ".IDDetail FROM ( " & vbCrLf & sSuchBoxes
'</ Box-Header >
End If

'-< innere SQLBox >-
If iWord = 0 Then
'< init: erstes Feld in erster innerer Box >
sSuchBoxes &= vbCrLf & " SELECT IDDetail"
sSuchBoxes &= vbCrLf & " FROM tblWeb_Details"
'</ init: erstes Feld in erster innerer Box >
End If
sSuchBoxes &= vbCrLf & " INNER JOIN tblSYS_Word_References "
sSuchBoxes &= vbCrLf & " ON tblSYS_Word_References.IDRecordset = "
If iWord = 0 Then
sSuchBoxes &= vbCrLf & " tblWeb_Details.IDDetail"
Else
sSuchBoxes &= vbCrLf & " Dataset_" & Format((iWord - 1), "00") & ".IDDetail"
End If

sSuchBoxes &= vbCrLf & " INNER JOIN tblSYS_Words"
sSuchBoxes &= vbCrLf & " ON tblSYS_Word_References.IDWord = tblSYS_Words.IDWord "
'-</ innere SQLBox >-
sSuchBoxes &= vbCrLf & " AND tblSYS_Words.[Word] LIKE '" & sWord & "'"
sSuchBoxes &= vbCrLf & " ) AS Dataset_" & Format(iWord, "00")
Next

'< ErgebnisIDs mit Detailfelden koppeln >
sSQL &= vbCrLf & " FROM ( "
sSQL &= vbCrLf & sSuchBoxes
sSQL &= vbCrLf & " INNER JOIN tblWeb_Details AS tblDetails "
sSQL &= vbCrLf & " ON Dataset_" & Format((arrWords.Length - 1), "00") & ".IDDetail = tblDetails.IDDetail"
sSQL &= vbCrLf & " ) AS dsDetails"

'</ ErgebnisIDs mit Detailfelden koppeln >

'--</ mit Suche >--
ElseIf _IDFolder = 0 Then
'-< ohne Folder >-
sSQL &= vbCrLf & " FROM tblWeb_Details AS dsDetails"
sSQL &= vbCrLf & " WHERE dsDetails.IDArea = " & _IDArea
'-</ ohne Folder >-
Else
'-< mit Folder >-
sSQL &= vbCrLf & " FROM tblWeb_Details AS dsDetails"
sSQL &= vbCrLf & " INNER JOIN tblSys_Folders"
sSQL &= vbCrLf & " ON dsDetails.IDFolder = tblSys_Folders.IDFolder"
sSQL &= vbCrLf & " WHERE dsDetails.IDArea = " & _IDArea
sSQL &= vbCrLf & " AND (tblSys_Folders.IDFolder=" & _IDFolder & " OR tblSys_Folders.IDParent=" & _IDFolder & ")"
'-</ mit Folder >-
End If
sSQL &= vbCrLf & " ORDER BY IDDetail DESC"
'</ SQL erstellen >


Mobile
SQL
»
SQL Commands
»
Install SQL Server Express Edition and Start login
»
SQL Server Warning: Data loss could occur
»
SQL Server: Default default current time
»
Instr(..) in SQL Server
»
Access, SQL : Duplikate oder doppelte Ergebnisse ausblenden mit DISTINCT
»
Verschachtelte, komplexe Abfragen mit Detailfeldern erweitern
»
Verschachteln von komplexen Abfragen
»
SELECT Abfrage als geschlossenes neues Datenset, Tabelle ausgeben
»
Kapseln eines SQL-Ergebnisses / Werte-Tabelle in einer neuen Tabelle

.

Contact for Jobs, Project Requests: raimund.popp@microsoft-programmierer.de