簡體   English   中英

在這種情況下使用LEFT JOIN?

[英]Using LEFT JOIN in this case?

這是一個任意示例,這是數據庫結構。 我無法更改。

我有兩個表:[電話]和[型號]。

在兩個表中,主列均為[電話]。[名稱]和[型號]。[名稱]。

通常,兩個表都有相關數據。 例如:

[Models.Name]         [Models.Quarter]
Samsung Galaxy S3      1
Samsung Galaxy S4      2
Samsung Galaxy S5      3


[Phone.Name]          [Phone.Quarter]
Samsung               1

由於表的結構,我可以聯接兩個表的唯一方法是通過Name和Quarter列。 所以我最終像這樣使用了LEFT JOIN,然后得到了所需的結果:

SELECT Models.*, Phone.* 
from dbo.Models left join Phone
on left(Models.Name, LEN(Phone.Name)) = Phone.Name 
WHERE 
[Phone.Quarter] = [Models.Quarter]

不幸的是,在某些情況下[Models]有數據,但是[Phone]; 在這種情況下,[型號]有3條記錄,但[電話]沒有。 在這里, WHERE子句破壞了LEFT JOIN的全部目的。

在同一個表中使用兩個LEFT JOIN是否有意義?

使用外部聯接時,如果要保留外部表中的聯接null值,則必須將內部表上的限制作為聯接語法的一部分。

SELECT Models.*, Phone.* 
FROM dbo.Models 
LEFT JOIN Phone
  on left(Models.Name, LEN(Phone.Name)) = Phone.Name 
 and [Phone.Quarter] = [Models.Quarter]

或這樣做,盡管它不那么優雅,並且遭受無法將NULL與聯接與NULL值區分開的事實。

SELECT Models.*, Phone.* 
FROM dbo.Models 
LEFT JOIN Phone
  on left(Models.Name, LEN(Phone.Name)) = Phone.Name 
WHERE ([Phone.Quarter] = [Models.Quarter] OR [Phone.Quarter] is null)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM