是否有一种简单的方法可以从两个不相关的表中选择两个列,以便在插入中使用这些列?

免责声明:理想情况下,我将不需要这样做,因为该模式将被设置为带有一些“外键”和“参照完整性”的东西。但是,似乎这些概念都不存在于创建此模式的星球上。

这是我需要做的简化版:

客户表

Id     Name
------------
1      Eddie
2      Stone
3      Mike

产品表
Id     Name
---------------------
100    Drum sticks
101    Guitar strings
102    Amplifier

发票表
Id     CustomerName      ProductName
---------------------------------------
1000   Eddie             Guitar Strings
1001   Mike              Amplifier

在我的SQL代码中,我有一个:CustomerId:ProductId,理想情况下,我想做这样的事情:
INSERT Invoice (
    Id,
    CustomerName,
    ProductName
)
SELECT
    :InvoiceId,
    Customer.Name,
    Product.Name
FROM
    Customer,
    Product
WHERE
    Customer.CustomerId = :CustomerId
    and Product.ProductId = :ProductId

如果“客户”和“产品”记录都存在,则可以正常工作,但我还需要解决其中不存在任何一项的情况。 (对真的。)

我能想到的唯一方法是声明诸如:CustomerName:ProductName之类的变量并将其预填充到insert语句之外。

有没有没有多余的变量方法来实现这一目标的方法?

最佳答案

您可以这样做:

INSERT Invoice (
    Id,
    CustomerName,
    ProductName
)
SELECT
    :InvoiceId,
    (
        SELECT
            Customer.Name
        FROM
            Customer
        WHERE
            Customer.CustomerId = :CustomerId
    ),
    (
        SELECT
            Product.Name
        FROM
            Product
        WHERE
            Product.ProductId = :ProductId
    )
FROM RDB$DATABASE

09-26 17:01