有人可以澄清究竟是如何这些连接在一起,我知道如何连接在SQL的工作,但这似乎相当混乱。我很困惑查询是如何相互连接的,我试图分解查询并单独运行它们,但它失败了,我真的很感谢任何关于这方面的建议。
select distinct
[Mandant_5].[Zahlungsabgleich].[lvRechnungZahlungszuordnung].[cBestellnummer] as [OrderNumber],
[Mandant_5].[Zahlungsabgleich].[lvRechnungZahlungszuordnung].[dBestelldatum] as [OrderDate],
[Mandant_5].[RM].[lvRetoureLieferscheinPos].[cArtNr] as [Artikelnummer],
[Mandant_5].[RM].[lvRetoureLieferscheinPos].[cName] as [Bezeichnung], --not required
[Mandant_5].[dbo].[tArtikel].[cASIN] as [ASIN],
[Mandant_5].[DbeS].[vLieferscheinPosition].[fAnzahl] as [Menge],
[Mandant_5].[Rechnung].[tRechnungPositionEckdaten].[fVKNettoGesamt] as [Netto-VK (Gesamt)],-- not required
([Mandant_5].[Rechnung].[tRechnungPositionEckdaten].[fVKNettoGesamt]/[Mandant_5].[DbeS].[vLieferscheinPosition].[fAnzahl]) as [Netto-VK], -- not required
[Mandant_5].[Rechnung].[tRechnungPositionEckdaten].[fVKBrutto] as [Brutto-VK],
[Mandant_5].[SCX].[vOrderShippingShippedFrom].[cCountryIso] as [Country],
[Mandant_5].[Zahlungsabgleich].[lvRechnungZahlungszuordnung].[cZahlungsartbezeichnung] as [Zahlungsart],-- not required
[Mandant_5].[Zahlungsabgleich].[lvRechnungZahlungszuordnung].[fBetrag] as [Betrag] -- question
from [Mandant_5].[Rechnung].[tRechnungPositionEckdaten]
join [Mandant_5].[Rechnung].[tRechnungLieferscheinPosition]
on [Mandant_5].[Rechnung].[tRechnungPositionEckdaten].[kRechnungPosition] = [Mandant_5].[Rechnung].[tRechnungLieferscheinPosition].[kRechnungPosition]
join [Mandant_5].[DbeS].[vLieferscheinPosition]
on [Mandant_5].[Rechnung].[tRechnungLieferscheinPosition].[kLieferscheinPosition] = [Mandant_5].[DbeS].[vLieferscheinPosition].[kLieferscheinPos]
join [Mandant_5].[RM].[lvRetoureLieferscheinPos]
on [Mandant_5].[RM].[lvRetoureLieferscheinPos].[kLieferscheinPos] = [Mandant_5].[Rechnung].[tRechnungLieferscheinPosition].[kLieferscheinPosition]
join [Mandant_5].[dbo].[tArtikel]
on [Mandant_5].[dbo].[tArtikel].[cArtNr] = [Mandant_5].[RM].[lvRetoureLieferscheinPos].[cArtNr]
join [Mandant_5].[SCX].[vOrderShippingShippedFrom]
on [Mandant_5].[SCX].[vOrderShippingShippedFrom].[kAuftrag] = [Mandant_5].[RM].[lvRetoureLieferscheinPos].[kAuftrag]
join [Mandant_5].[Statistik].[vRechnung]
on [Mandant_5].[Statistik].[vRechnung].[kAuftrag] = [Mandant_5].[RM].[lvRetoureLieferscheinPos].[kAuftrag]
join [Mandant_5].[Zahlungsabgleich].[lvRechnungZahlungszuordnung]
on [Mandant_5].[Zahlungsabgleich].[lvRechnungZahlungszuordnung].[cRechnungsnummer] = [Mandant_5].[Statistik].[vRechnung].[cRechnungsnr]
我敢肯定,复杂的表引用使读取查询变得更加困难。因此,为了帮助(即使只是为了您自己的理解),我建议为每个表授予一个别名,这将有助于减少多部分表/列引用的数量。
。
SELECT DISTINCT
PositionEckdaten.[fVKNettoGesamt] AS [Netto-VK (Gesamt)]
-- , PositionEckdaten.[fVKBrutto] AS [Brutto-VK]
-- tRechnungLieferscheinPosition -- no columns from this table
, vLieferscheinPosition.[fAnzahl] AS [Menge]
-- , (PositionEckdaten.[fVKNettoGesamt]
-- / vLieferscheinPosition].[fAnzahl]) AS [Netto-VK]
, LieferscheinPos.[cArtNr] AS [Artikelnummer]
, LieferscheinPos.[cName] AS [Bezeichnung]
-- , tArtikel.[cASIN] AS [ASIN]
, ShippedFrom.[cCountryIso] AS [Country]
-- vRechnung -- no columns from this table
, zuordnung.[cBestellnummer] AS [OrderNumber]
, zuordnung.[dBestelldatum] AS [OrderDate]
, zuordnung.[cZahlungsartbezeichnung] AS [Zahlungsart]
-- , zuordnung.[fBetrag] AS [Betrag]
FROM [Mandant_5].[Rechnung].[tRechnungPositionEckdaten] as PositionEckdaten
JOIN [Mandant_5].[Rechnung].[tRechnungLieferscheinPosition] as tRechnungLieferscheinPosition ON PositionEckdaten.[kRechnungPosition] = tRechnungLieferscheinPosition.[kRechnungPosition]
JOIN [Mandant_5].[DbeS].[vLieferscheinPosition] as vLieferscheinPosition ON tRechnungLieferscheinPosition.[kLieferscheinPosition] = vLieferscheinPosition.[kLieferscheinPos]
JOIN [Mandant_5].[RM].[lvRetoureLieferscheinPos] as LieferscheinPos ON tRechnungLieferscheinPosition.[kLieferscheinPosition] = LieferscheinPos].[kLieferscheinPos]
JOIN [Mandant_5].[dbo].[tArtikel] as tArtikel ON LieferscheinPos.[cArtNr] = tArtikel.[cArtNr]
JOIN [Mandant_5].[SCX].[vOrderShippingShippedFrom] as ShippedFrom ON LieferscheinPos.[kAuftrag] = ShippedFrom].[kAuftrag]
JOIN [Mandant_5].[Statistik].[vRechnung] as vRechnung ON LieferscheinPos.[kAuftrag] = vRechnung.[kAuftrag]
JOIN [Mandant_5].[Zahlungsabgleich].[lvRechnungZahlungszuordnung] as zuordnung ON vRechnung.[cRechnungsnr] = zuordnung.[cRechnungsnummer]
此外,通过一些额外的格式化(如列别名的对齐),它更容易阅读。我还按照连接表的顺序重新排列了所选列。
在join中,我也重新安排了ON之后的顺序。例如
from t1
join t2 on t1.id = t2.pk -- I prefer to list the prerequisite table first in each join
这样排列,我相信你可以更容易地看到关系
<>之前从…作为PositionEckdaten加入……作为tRechnungLieferscheinPosition ONPositionEckdaten。[kRechnungPosition] = tRechnungLieferscheinPosition.[kRechnungPosition]加入……作为vLieferscheinPosition ONtRechnungLieferscheinPosition。[kLieferscheinPosition] = vLieferscheinPosition.[kLieferscheinPos]加入……as LieferscheinPos ONtRechnungLieferscheinPosition。[kLieferscheinPosition] = LieferscheinPos .[kLieferscheinPos]加入……如tArtikel ONLieferscheinPos。[cArtNr] = tArtikel.[cArtNr]加入……as ShippedFrom ONLieferscheinPos。[kAuftrag] = ShippedFrom].[kAuftrag]加入……as vrechunung ONLieferscheinPos。[kAuftrag] = vRechnung.[kAuftrag]加入……as zuordnung ONvrechung。[crechunungsnr] = zuordnung。[crechnungsummer]总的来说,查询似乎相对简单,只有8个表内部连接在一起(所以不需要考虑外部连接),除了2个表外,所有表都在select子句中直接引用。这两个未引用的表是连接其他表所必需的。
没有什么可说的,除了8个连接表的几个列的select distinct
可能不是最佳的。