這兩個表相當大,我的 select 語句有更多我獲得的值,但我認為我可以簡化這些資料和查詢,以便回答我的問題。
這是我的選擇語句:
SELECT invoice.InvoiceNum, Layer, InvoiceItemNum FROM (INVOICE left outer join InvoiceItem item ON item.InvoiceNum = Invoice.InvoiceNum ) ORDER BY invoice.InvoiceNum
所以我有兩張桌子。 Invoice 表和 InvoiceItem 表。它們由每個表中的 InvoiceNum 列連接起來,並顯示 InvoiceNum 和 Layer 列
以下是此查詢的結果:
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
由於我的 InvoiceItem 表有多行可以分配給 1 個 InvoiceNum,這導致我的結果中出現重複的 InvoiceNum,這是我不希望的。
這是我試圖獲得的結果,只列出發票表中的1 個發票編號,其中第一種情況是來自InvoiceItem 表的圖層列的非零值,如果沒有非零值,則列出第一個零。
嘗試這樣的事情:
InvoiceNum | Layer | InvoiceItemNum 1 | 10 | 1 2 | 3 | 2 3 | 0 | 1 4 | 5 | 3
我只是不確定如何執行此操作,或者鑑於它們位於兩個不同的表上,這是否可能。
假設/理解:
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 中:
試試這個: