making strsql from sql with different tables - mysql

So i need to make a strsql like this one :
strSQL = "SELECT "
strSQL = strSQL & " tblclips.fldclipid, "
strSQL = strSQL & " tblPlatenfirma.fldplatenfirmaID, "
strSQL = strSQL & " tblClips.fldUitvoerder, "
strSQL = strSQL & " tblClips.fldTitel, "
strSQL = strSQL & " tblPlatenfirma.fldnaam"
strSQL = strSQL & " FROM "
strSQL = strSQL & " tblClips "
strSQL = strSQL & " INNER JOIN tblPlatenfirma "
strSQL = strSQL & " ON tblClips.fldplatenfirmaid = tblPlatenfirma.fldplatenfirmaID"
strWHERE = ""
But i got a SQL code that I don't understand so with the result I can't make a strSQL, I really need this for a school project and i got a few days left. This is the SQL i don't understand:
SELECT tbluurroosterleerkracht.flduurroosterleerkrachtID AS uurroosterID, tblklas.fldnaam AS Klas, tbllokaal.fldnummer AS Hoofdlokaal, tblvak.fldvak AS Vak, tbllokaal_1.fldnaam AS LesLokaal, tbllokaal_2.fldbeschikbaar AS beschikbaar, tblleerkracht.fldnaam AS NaamLeerkrachtNormaal, tblleerkracht.fldvoornaam AS VoornaamLeerkrachtnormaal, tbldag.flddag AS Dag, tbllesuur.fldvan AS Van, tbllesuur.fldtot AS Tot
FROM (((tbllokaal AS tbllokaal_2 RIGHT JOIN (tblvervangingen LEFT JOIN tblleerkracht AS tblleerkracht_1 ON tblvervangingen.fldleerkrachtID = tblleerkracht_1.fldleerkrachtID) ON tbllokaal_2.fldlokaalID = tblvervangingen.fldlokaalID) LEFT JOIN tbltaak ON tblvervangingen.fldtaakID = tbltaak.fldtaakID) LEFT JOIN tblleerkracht AS tblleerkracht_2 ON tbltaak.fldleerkrachtID = tblleerkracht_2.fldleerkrachtID) RIGHT JOIN (((tbllokaal AS tbllokaal_1 INNER JOIN (((tbldag INNER JOIN (tblklas INNER JOIN tbluurroosterleerkracht ON tblklas.fldklasID = tbluurroosterleerkracht.fldklasID) ON tbldag.flddagID = tbluurroosterleerkracht.flddagID) INNER JOIN tblvak ON tbluurroosterleerkracht.fldvakID = tblvak.fldvakID) INNER JOIN tbllokaal ON tblklas.fldlokaalID = tbllokaal.fldlokaalID) ON tbllokaal_1.fldlokaalID = tbluurroosterleerkracht.fldlokaalID) INNER JOIN tbllesuur ON tbluurroosterleerkracht.fldlesuurID = tbllesuur.fldlesuurID) INNER JOIN tblleerkracht ON tbluurroosterleerkracht.fldleerkrachtID = tblleerkracht.fldleerkrachtID) ON tblvervangingen.flduurroosterleerkrachtID = tbluurroosterleerkracht.flduurroosterleerkrachtID
ORDER BY tblleerkracht.fldnaam, tblleerkracht.fldvoornaam, tbldag.flddag, tbllesuur.fldvan;

It is an unusual SQL query. Are you sure it produces the result you want?
When trying to understand code it is useful to format it so that you can clearly see each part of it. This is particularly true for big SQL queries, and code with lots of nested bracketted bits.
Here is the SQL with my rough formatting applied...
SELECT
tbluurroosterleerkracht.flduurroosterleerkrachtID AS uurroosterID,
tblklas.fldnaam AS Klas,
tbllokaal.fldnummer AS Hoofdlokaal,
tblvak.fldvak AS Vak,
tbllokaal_1.fldnaam AS LesLokaal,
tbllokaal_2.fldbeschikbaar AS beschikbaar,
tblleerkracht.fldnaam AS NaamLeerkrachtNormaal,
tblleerkracht.fldvoornaam AS VoornaamLeerkrachtnormaal,
tbldag.flddag AS Dag,
tbllesuur.fldvan AS Van,
tbllesuur.fldtot AS Tot
FROM
(
(
(tbllokaal AS tbllokaal_2
RIGHT JOIN (tblvervangingen
LEFT JOIN tblleerkracht AS tblleerkracht_1
ON tblvervangingen.fldleerkrachtID = tblleerkracht_1.fldleerkrachtID
)
ON tbllokaal_2.fldlokaalID = tblvervangingen.fldlokaalID
)
LEFT JOIN tbltaak
ON tblvervangingen.fldtaakID = tbltaak.fldtaakID
)
LEFT JOIN tblleerkracht AS tblleerkracht_2
ON tbltaak.fldleerkrachtID = tblleerkracht_2.fldleerkrachtID
)
RIGHT JOIN
(
(
(tbllokaal AS tbllokaal_1
INNER JOIN
(
(
(tbldag
INNER JOIN
(tblklas
INNER JOIN tbluurroosterleerkracht
ON tblklas.fldklasID = tbluurroosterleerkracht.fldklasID
)
ON tbldag.flddagID = tbluurroosterleerkracht.flddagID
)
INNER JOIN tblvak
ON tbluurroosterleerkracht.fldvakID = tblvak.fldvakID
)
INNER JOIN tbllokaal
ON tblklas.fldlokaalID = tbllokaal.fldlokaalID
)
ON tbllokaal_1.fldlokaalID = tbluurroosterleerkracht.fldlokaalID
)
INNER JOIN tbllesuur
ON tbluurroosterleerkracht.fldlesuurID = tbllesuur.fldlesuurID
)
INNER JOIN tblleerkracht
ON tbluurroosterleerkracht.fldleerkrachtID = tblleerkracht.fldleerkrachtID
)
ON tblvervangingen.flduurroosterleerkrachtID = tbluurroosterleerkracht.flduurroosterleerkrachtID
ORDER BY
tblleerkracht.fldnaam,
tblleerkracht.fldvoornaam,
tbldag.flddag,
tbllesuur.fldvan;
Is there a specific part that you do not understand?
I think despite not understanding how the SQL works. Your string building method should still work as a way to store the sql in a program variable.

Related

How can i merge joins?

I have the following query which works but i would like to improve (performance wise):
.sentence_id and .project_id are indexes.
My goal now is to try to merge the 2 joins on the same tables into a single one (if possible)
How can i do that ?
SELECT rs.project_id,
ms.id AS raw_sentence_id,
rs.sentence AS raw_sentence_text,
rs.sentence_id AS raw_sentence_text_id,
rst.tokens AS tokenization_information,
ns.sentence_id AS normalized_sentence_id,
ns.sentence AS normalized_sentence_text,
nst.token_indices
FROM manual_sentences ms
JOIN sentences rs ON (ms.original_sentence_id = rs.sentence_id AND rs.project_id = 623483)
LEFT JOIN sentence_tokens rst ON (ms.original_sentence_id = rst.sentence_id AND rst.project_id = 623483)
JOIN sentences ns ON (ms.sentence_id = ns.sentence_id AND ns.project_id = 623483)
LEFT JOIN sentence_tokens nst ON (ms.sentence_id = nst.sentence_id AND nst.project_id = 623483)
WHERE ms.project_id = 623483
You should be able to do that using a conjunction:
SELECT rs.project_id,
ms.id AS raw_sentence_id,
rs.sentence AS raw_sentence_text,
rs.sentence_id AS raw_sentence_text_id,
rst.tokens AS tokenization_information,
ns.sentence_id AS normalized_sentence_id,
ns.sentence AS normalized_sentence_text,
nst.token_indices
FROM manual_sentences ms
JOIN sentences rs ON (ms.original_sentence_id = rs.sentence_id AND rs.project_id = 623483)
LEFT JOIN sentence_tokens rst ON (ms.original_sentence_id = rst.sentence_id AND ms.sentence_id = rst.sentence_id AND rst.project_id = 623483)
JOIN sentences ns ON (ms.sentence_id = ns.sentence_id AND ns.project_id = 623483)
WHERE ms.project_id = 623483

How to make MySQL code shorter?

Im trying to do a date filter for my report generate form. I have a DateTimePicker with checkbox in this form, If checkbox checked the query will add a WHERE clause.
Currently Im doing this way:-
If DateTimePicker1.Checked Then
query = "SELECT payment_type, sales_payment_dtl.payment_amt, payment_remark, sales_payment_dtl.created_date, sales.inv_no
FROM sales_payment_dtl
INNER JOIN sales_payment
ON sales_payment_dtl.payment_id = sales_payment.payment_id
INNER JOIN sales
ON sales_payment.sales_id = sales.sales_id
WHERE sales_payment_dtl.created_date = '"& DateTimePicker.Text &"'"
Else
query = "SELECT payment_type, sales_payment_dtl.payment_amt, payment_remark, sales_payment_dtl.created_date, sales.inv_no
FROM sales_payment_dtl
INNER JOIN sales_payment
ON sales_payment_dtl.payment_id = sales_payment.payment_id
INNER JOIN sales
ON sales_payment.sales_id = sales.sales_id"
End If
Is it possible to make the code shorter? Because I need to add somemore filter in future, then the code will become very long, Maybe something like this?
query = "SELECT payment_type, sales_payment_dtl.payment_amt, payment_remark, sales_payment_dtl.created_date, sales.inv_no
FROM sales_payment_dtl
INNER JOIN sales_payment
ON sales_payment_dtl.payment_id = sales_payment.payment_id
INNER JOIN sales
ON sales_payment.sales_id = sales.sales_id
IF '"& DateTimePicker.Checked = True &"' THEN
WHERE sales_payment_dtl.created_date = '"& DateTimePicker.Text &"'
ELSE
do nothing"
Simple logic.
query = "SELECT payment_type, sales_payment_dtl.payment_amt, payment_remark, sales_payment_dtl.created_date, sales.inv_no " & _
"FROM(sales_payment_dtl) " & _
"INNER JOIN sales_payment " & _
"ON sales_payment_dtl.payment_id = sales_payment.payment_id " & _
"INNER JOIN sales " & _
"ON sales_payment.sales_id = sales.sales_id"
If DateTimePicker1.Checked Then
query &= " WHERE sales_payment_dtl.created_date = '" & DateTimePicker.Text & "'"
End If

Union ALL query failed in VBA but ok in SQL

I Tried to run the below Query but its showing an error incorrect syntax near 'unionselect' Can anyone help?
strsql = "select distinct a.LOCID,locnum,locname,streetname,city,county,statecode,state,peril,SITEDEDAMT,SITELIMAMT,COMBINEDDEDAMT,COMBINEDLIMAMT from eqdet a inner join loccvg b on a.LOCID=b.locid inner join loc c on b.LOCID=c.LOCID where PERIL=1" & _
"union" & _
"select distinct a.LOCID,locnum,locname,streetname,city,county,statecode,state,peril,SITEDEDAMT,SITELIMAMT,COMBINEDDEDAMT,COMBINEDLIMAMT from hudet a inner join loccvg b on a.LOCID=b.locid inner join loc c on b.LOCID=c.LOCID where peril=2" & _
"union" & _
"select distinct a.LOCID,locnum,locname,streetname,city,county,statecode,state,peril,SITEDEDAMT,SITELIMAMT,COMBINEDDEDAMT,COMBINEDLIMAMT from todet a inner join loccvg b on a.LOCID=b.locid inner join loc c on b.LOCID=c.LOCID where peril=3" & _
"union" & _
"select a.LOCID,locnum,locname,streetname,city,county,statecode,state,peril,SITEDEDAMT,SITELIMAMT,COMBINEDDEDAMT,COMBINEDLIMAMT from fldet a inner join loccvg b on a.LOCID=b.locid inner join loc c on b.LOCID=c.LOCID where peril=4" & _
"union" & _
"select distinct a.LOCID,locnum,locname,streetname,city,county,statecode,state,peril,SITEDEDAMT,SITELIMAMT,COMBINEDDEDAMT,COMBINEDLIMAMT from frdet a inner join loccvg b on a.LOCID=b.locid inner join loc c on b.LOCID=c.LOCID where peril=5" & _
"union" & _
"select distinct a.LOCID,locnum,locname,streetname,city,county,statecode,state,peril,SITEDEDAMT,SITELIMAMT,COMBINEDDEDAMT,COMBINEDLIMAMT from trdet a inner join loccvg b on a.LOCID=b.locid inner join loc c on b.LOCID=c.LOCID where peril=6"
Looking at the error message I suspect you are concatinating a string to make the query. unionselect should be two words, seperated by a space. (union select) I think that in your code spaces are missing to separate keywords.
See:
"...where PERIL=1" & _ "union" & _ "select distinct..."
will produce
...where PERIL=1unionselect distinct...
output. Correct code (notice the spaces around the union):
"...where PERIL=1" & _ " union " & _ "select distinct ..."

Query Change from MySQL to MS Access

i have a view in MySQL but for some reason i want it to write in MS Access..i have already imported neccessary tables. when i copy the view definaation from MySQL and write it in Access Query Design it gives me error on "Join operation".What's wrong here ?
View -> qryOccupation
select `a`.`Employee_ID` AS `Employee_ID`,`a`.`Employee_Name` AS `Employee_Name`,`a`.`Flat_No` AS `Flat_No`,`a`.`Area` AS `Area`,`a`.`Building_Name` AS `Building_Name`
from (`tblallotment` `a` join `tblflat` `f`)
where ((`a`.`Flat_No` = `f`.`Flat_No`)
and (`f`.`Status` = 'A')
and (not(`a`.`Employee_ID` in
(select `c`.`Employee_ID`
from (`tblallotment` `a` join `tblcancel_allotment` `c`)
where ((`a`.`Employee_ID` = `c`.`Employee_ID`)
and (`c`.`Date_Cancellation` = 0))))))
select a.Employee_ID AS Employee_ID,
a.Employee_Name AS Employee_Name,
a.Flat_No AS Flat_No,
a.Area AS Area,
a.Building_Name AS Building_Name
from tblallotment a
inner join tblflat f
on a.Flat_No = f.Flat_No
where f.Status = 'A'
and (not (a.Employee_ID in
(select c.Employee_ID
from tblallotment a
inner join tblcancel_allotment c
on a.Employee_ID = c.Employee_ID
where c.Date_Cancellation = 0)))
("SELECT [Department Name], " _
& "FirstName & Chr(32) & LastName AS Name " _
& "FROM Departments LEFT JOIN Employees " _
& "ON Departments.[Department ID] = " _
& "Employees.[Department ID] " _
& "ORDER BY [Department Name];")

Conversion C# to VB.net Linq to Sql

Need vb.net conversion of the below:
orginal question at LINQ To SQL "Group By"
from S in SERVER
join H in SERVERHDD on S.Server_ID equals H.Server_ID
join FILTER in
(from s in SERVERHDD group s
by new {s.Server_ID, s.Letter}
into groupedServerHDD select new
{
SERVERHDD_ID = groupedServer.Sum(gS=>gS.ServerHDD_ID)
}
)
on H.ServerHDD_ID equals FILTER.SERVERHDD_ID
orderby S.Hostname, H.Letter
select S
Thanks in Advance.
From http://www.developerfusion.com/tools/convert/csharp-to-vb/ and untested.
Dim x = From S In SERVER _
Join H In SERVERHDD On S.Server_ID = H.Server_ID _
Join FILTER In (From s In SERVERHDD _
Group s By New ()IntogroupedServerHDD _
Select New ()) On H.ServerHDD_ID = FILTER.SERVERHDD_ID _
Order By S.Hostname, H.Letter _
Select S