繁体   English   中英

从两个不相关的表中选择不相关的列

[英]Select unrelated columns from two unrelated tables

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

免责声明 :理想情况下,我永远不需要这样做,因为架构会设置一些称为“外键”和“引用完整性”的东西。 但是,似乎这个概念都不存在于创建此模式的星球上。

这是我需要做的简化版本:

客户表

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和a :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

在Arion提供的答案旁边,您可以使用FULL OUTER JOIN ,其连接条件始终为true。 这仅在两个子查询生成单行时才能正常工作。

SELECT
   :InvoiceId,
   CustomerName,
   ProductName
FROM (
   SELECT CustomerName
   FROM Customer
   WHERE CustomerId = :CustomerId
) a
FULL OUTER JOIN (
   SELECT ProductName
   FROM Product
   WHERE Product.ProductId = :ProductId
) b
   ON 1 = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM