我會開始說,我正在處理兩張表,它們的組織方式有點混亂。我目前正在懇求我的情況下進行調整,但無法控制他們。所以桌子的組織不在我的控制之下。SQL聯盟更喜歡從一個表的記錄?
我有一個表,看起來像這樣
客戶
| id | name | date_joined |
|----|------|-------------|
| 1 | Bob | 2012-01-01 |
| 2 | Jack | 2012-01-01 |
| 3 | Jill | 2012-01-01 |
由於客戶表創建,另一個表已創建爲保持客戶信息
顧客2
| id | name | year_joined | month_joined | day_joined |
|----|---------|-------------|--------------|------------|
| 4 | Ken | 2013 | 1 | 1 |
| 5 | Lindsey | 2013 | 1 | 1 |
| 1 | Bob | 2012 | 1 | 1 |
您會注意到,雖然Customer2包含前兩個條目的新客戶,但它還包含Bob,他與第一個表中的Bob具有相同的更新信息以匹配新的Customer2表格佈局。
我需要根據ID列表將所有這些記錄選擇到一個結果集中,假設ID是唯一的。因此,我們可以確定客戶中的鮑勃與客戶2中的鮑勃相同。我目前正在用這樣的工會聲明來做這件事。
select *
from (
select id,
name,
date_joined,
'' as year_joined,
'' as month_joined,
'' as day_joined
from customer
union
select id,
name,
'' as date_joined,
year_joined,
month_joined,
day_joined
from customer2)
as U where U.id in (list of ID's)
然而這會導致看起來像這樣
| id | name | date_joined | year_joined | month_joined | day_joined |
|----|---------|-------------|-------------|--------------|------------|
| 4 | Ken | | 2013 | 1 | 1 |
| 5 | Lindsey | | 2013 | 1 | 1 |
| 1 | Bob | | 2012 | 1 | 1 |
| 1 | Bob | 2012-01-01 | | | |
| 2 | Jack | 2012-01-01 | | | |
| 3 | Jill | 2012-01-01 | | | |
正如我們可以看到,我們有「重複」記錄鮑勃,這是不是真的重複表。我的問題是這樣的:當我遇到像這樣的'重複'時,是否有任何方法可以指定從Customer2表中選擇記錄?我需要這個,因爲我不想重複,而且更喜歡保留匹配最新表格佈局的記錄。
這就是我需要的。它非常簡單,我想我對聯盟的想法太多了,我忘了我可以在那裏放置一個where子句。謝謝一堆! – decal