Die beiden Tabellen sind ziemlich groß und meine Select-Anweisung enthält mehr Werte, als ich erhalte, aber ich denke, ich kann diese Daten und Abfrage vereinfachen, um meine Frage zu beantworten.
Das ist meine Wahlaussage:
SELECT invoice.InvoiceNum, Layer, InvoiceItemNum FROM (INVOICE left outer join InvoiceItem item ON item.InvoiceNum = Invoice.InvoiceNum ) ORDER BY invoice.InvoiceNum
Ich habe also zwei Tische. Invoice-Tabelle und InvoiceItem-Tabelle. Sie werden durch die Spalte „InvoiceNum“ in jeder Tabelle verbunden und zeigen die Spalten „InvoiceNum“ und „Layer“
Hier sind die Ergebnisse dieser Abfrage:
InvoiceNum | Layer | InvoiceItemNum 1 | 10 | 1 1 | 0 | 2 1 | 7 | 3 1 | 0 | 4 2 | 0 | 1 2 | 3 | 2 3 | 0 | 1 3 | 0 | 2 3 | 0 | 3 4 | 0 | 1 4 | 0 | 2 4 | 5 | 3
Da meine InvoiceItem-Tabelle mehrere Zeilen enthält, die 1 InvoiceNum zugewiesen werden können, führt dies zu doppelten InvoiceNums in meinen Ergebnissen, was ich nicht möchte.
Dies ist das Ergebnis, das ich zu erhalten versuche, um nur eine Rechnungsnummer aus der Rechnungstabelle aufzulisten, wobei der erste Fall ein Wert ungleich Null aus der Ebenenspalte der Tabelle „InvoiceItem“ ist und wenn es keinen Wert ungleich Null gibt , Listen Sie die erste A-Null auf.
Versuchen Sie etwas wie Folgendes:
InvoiceNum | Layer | InvoiceItemNum 1 | 10 | 1 2 | 3 | 2 3 | 0 | 1 4 | 5 | 3
Ich bin mir einfach nicht sicher, wie ich das machen soll oder ob das überhaupt möglich ist, da sie auf zwei verschiedenen Tischen liegen.
假设/理解:
sybase
标记,但问题并没有区分 4x 不同的 Sybase RDBMS 产品(ASE
、SQLAnywhere
、IQ
、Advantage
),因此我将坚持使用通用 SQL 语法(即 4x 产品具有不同的SQL 方言;此外,ASE 不支持 CTE)left (outer) join
的使用,因为提供的输出似乎没有表明InvoiceItem
中存在任何“缺失”行Layer
和InvoiceItemNum
列属于哪个表,因此我假设它们属于InvoiceItem
猜测一组最小表定义和关联的
insert
语句:生成OP当前输出的查询:
生成 OP 所需输出的几个不同(复杂、混乱)的想法:
left (外部)join
ASE 16.0
中测试的所有查询这个问题有点棘手:
在 Postgres 中尝试一下:
演示
在 MySQL 8 中:
试试这个: