【发布时间】:2014-06-10 20:58:22
【问题描述】:
BookID Title ReleaseYear
1 The Hobbit 1937
2 Atlas Shrugged 1957
BookID Cost BookPrinterID
1 12 38
BookID Charge BookPublisherID
1 39 148
2 45 151
这就是我拥有的出版表格数据的书。
书籍表、成本表和收费表。
如果存在其他费用信息,我想查看来自单个查询的费用信息。即
BookID Cost
1 12
2 45
这是我的查询
select Books.BookID, ISNULL(Cost.Cost, Charge.Charge) AS Cost
from Books
left join Cost on Books.BookID = Cost.BookID
left join Charge on Book.BookID = Charge.BookID
这行得通,但问题是如果要加入更多表或要检索更多列,则每列都有 ISNULL 条件将变成一大块文本,尤其是在您必须解析 xml 时。
ISNULL(Cost.Xchange.value('/Partner[1]/@Sales[1]', 'nvarchar(500)'), Charge.Xchange.value('/Partner[1]/@Sales[1]', 'nvarchar(500)')) AS Xchange
我的问题是,有没有更简洁的方法来编写这个查询?
【问题讨论】:
-
我会给出最短的答案——不!您如何期望在不实际执行的情况下查询某些内容?您仅在必要时使用功能。有些列永远不会为空。您可以使用
where Cost.Cost is not null限制您的数据输出,并且您的数据永远不会为空。但是,是的,你必须写东西
标签: sql sql-server join