我正在尝试构建一个 sql 查询,该查询适用于具有 2 个表的前一个查询,并且非常简单。不过,这个已经让我发疯了 6 个小时。
我遇到的问题是,只有在所有条件都匹配时才会显示结果,而我不希望这样。如果数据库中没有条目,我希望该字段返回空白。
我有一张桌子,我想显示 orderrefno。此时我想检查是否已创建交货单,如果已创建,我想查看是否已创建发票。然后用每个的数字报告给报告,但如果它们不存在,则。它应该只有订单号,其他都是空白的,或者只有发票是空白的,如果完成了交货单。
我尝试使用内部、左连接、右连接、完整在水晶中构建查询,但如果发票不存在,我希望它列出交货编号和订单编号,但它不会。
我可以在 delphi 和 v studio 的数据源和主源中执行此操作,但我想做一个 sql,因为另一个简单的方法很慢。
我的桌子是
- 项目
- 命令
- 取消
- Calltodeliverylink
- 送货
- Deliverytoinvoicelink
- 发票
表链接如下。
Project.id 是主要的入口点。然后
Order.projectid -- project.id
Calloff.orderid -- order.id
Callofftodeliverylink.deliveryid -- 调用off.id
Delivery.id -- callofftodeliverylink.deliveryid
Deliverytoinvoicelink.deliveryid --delivery.id
Invoice.id --deliverytoinvoicelink.invoiceid
非常感谢
编辑:
添加代码。抱歉,FROM 部分一团糟。在水晶中绘制了链接字段并要求它向我展示查询,这就是它给我的。
SELECT
"Projects"."ID", "Orders"."IntOrderNo", "Deliveries"."DeliveryNo", "Projects"."InternalRef",
"CallOffs"."ID", "Customers"."Name", "Contacts"."Name", "Invoices"."InvoiceNo"
FROM
{oj (((((("GNManager"."dbo"."Invoices" "Invoices" LEFT OUTER JOIN "GNManager"."dbo"."DeliveryToInvoiceLink" "DeliveryToInvoiceLink" ON "Invoices"."ID"="DeliveryToInvoiceLink"."InvoiceID") LEFT OUTER JOIN "GNManager"."dbo"."Deliveries" "Deliveries" ON "DeliveryToInvoiceLink"."DeliveryID"="Deliveries"."ID") LEFT OUTER JOIN "GNManager"."dbo"."CallOffToDeliveryLink" "CallOffToDeliveryLink" ON "Deliveries"."ID"="CallOffToDeliveryLink"."DeliveryID") LEFT OUTER JOIN "GNManager"."dbo"."CallOffs" "CallOffs" ON "CallOffToDeliveryLink"."CallOffID"="CallOffs"."ID") LEFT OUTER JOIN ("GNManager"."dbo"."Projects" "Projects" LEFT OUTER JOIN "GNManager"."dbo"."Orders" "Orders" ON "Projects"."ID"="Orders"."ProjectID") ON "CallOffs"."OrderID"="Orders"."ID") INNER JOIN "GNManager"."dbo"."Customers" "Customers" ON "Orders"."CustomerID"="Customers"."ID") INNER JOIN "GNManager"."dbo"."Contacts" "Contacts" ON "Orders"."ContactID"="Contacts"."ID"}
WHERE
"Projects"."InternalRef"='12/4169'
ORDER BY
"Projects"."InternalRef" DESC, "Orders"."IntOrderNo" DESC
上面的语句确实有效并产生了我需要的一切,但前提是 Invoices 有一个条目。如果发票为空白,则不会显示任何内容。