[英]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.