2013-10-18 45 views
0

我有一個現有的查詢,提供了所需的結果 - 但我需要從另一個表中添加一列,仍然獲得相同的203行...當我嘗試加入到該表,我收到了數千行...現有的查詢工作 - 我需要從另一個表中添加一列

select a.state, a.alternate_id, a.reg_id 
from altid1 a, altid1 b 
where a.alternate_id=b.alternate_id 
and a.reg_id <> b.reg_id 
group by a.state, a.alternate_id, a.reg_id 
having count(a.alternate_id)>1 
order by state, alternate_id,reg_id; 

這給了我的狀態,並具有多個reg_ids每個替代ID ...現在我需要補充的是不存在兩種所有者字段altid1表

我需要連接到所有者表,並獲得相同的203結果只是附加的列...所有者表格包含reg_id列,但我怎麼能匹配該w母雞我試圖得到在原始表中有不同reg_id的那些?

select a.state, a.alternate_id, a.reg_id, c.owner1, c.ownertype1 
from altid1 a, altid1 b, owner c 
where a.alternate_id=b.alternate_id 
and a.reg_id <> b.reg_id 
group by a.state, a.alternate_id, a.reg_id, c.owner1, c.ownertype1 
having count(a.alternate_id)>1 
order by state, alternate_id, reg_id; 

謝謝你的幫忙!

+0

請在cluase中添加c.id = a.id。 – johnny

回答

0

試一試,確保將[id列]更改爲實際的字段名稱,並且a或b該表與c表有關係。

select a.state, a.alternate_id, a.reg_id, c.owner1, c.ownertype1 
    from altid1 a, altid1 b, owner c 
    where a.alternate_id=b.alternate_id 
    and a.reg_id <> b.reg_id 
    and c.[id column] = a or b . [id column] -- change id column to actual id field from the table and change a or b to the correct table having relationship with c table. 
    group by a.state, a.alternate_id, a.reg_id, c.owner1, c.ownertype1 
    having count(a.alternate_id)>1 
    order by state, alternate_id, reg_id; 
+0

謝謝你 - 我試圖與 – user2836119

+0

謝謝 我試過用: 和c.reg_id = a.reg_id 這個返回2213行 - 這樣的東西被複制 - 在altid1表只有787行。 ..其中我拉203 ... 請注意,A和B表實際上是相同的表 - 我只是想獲得有多個REG_ID爲每個alternate_id – user2836119

+0

工作?或不? – johnny

0

當您添加owner到你從你選擇沒有添加額外的連接條件的表。這意味着您在原始203行結果和owner之間執行交叉連接。

橫兩個表AB返回針對每個可能對行與一個在A和一個在B一個行之間的連接。所以如果An行和Bm行,A交叉加入Bm*n行。不好。

您需要做的是在where語句中添加一個附加子句。我無法確切知道你的代碼會是什麼。有沒有鏈接owneraltid1的列?

但是,也許更重要的是,不要使用逗號加入。他們很容易意外地創建交叉連接和其他許多可怕的可怕事情。如果您不小心在大型數據庫上進行交叉連接,您可以立即得到數百萬行。

請改用where子句來過濾結果並使用標準的JOIN語法連接其他表。

原始查詢會變成:

select a.state, a.alternate_id, a.reg_id 
from altid1 a 
inner join altid1 b 
    on a.alternate_id = b.alternate_id 
where a.reg_id <> b.reg_id 
group by a.state, a.alternate_id, a.reg_id 
having count(a.alternate_id)>1 
order by state, alternate_id,reg_id; 

然後新的查詢會是這個樣子(我只是做什麼鏈接owneraltid1猜測):

select a.state, a.alternate_id, a.reg_id 
from altid1 a 
inner join altid1 b 
    on a.alternate_id = b.alternate_id 
inner join owner c 
    on c.owner_id = a.owner_id 
where a.reg_id <> b.reg_id 
group by a.state, a.alternate_id, a.reg_id 
having count(a.alternate_id)>1 
order by state, alternate_id,reg_id; 

注我已經使用內連接了!我不能告訴你,owner應該帶有內連接還是左連接。不同之處的簡短解釋是,內連接將不包含找不到匹配行owner中的行。

P.S.請勿使用逗號加入

+0

沒有爲表無owner_id謝謝 – user2836119

+0

@ user2836119這只是一個佔位符。我不知道你的模式是什麼樣的。 – axblount

相關問題