2014-11-17 75 views
0

所有的數據我有兩個表QALEFT JOIN得到兩個表

記錄A

QID  UserID  Value 
1  100  A 
2  100  B 
3  100  C 
1  101  AA 
2  101  BB 
3  101  CC 
1  102  AAA 
2  102  BBB 

正如你所看到的,對於用戶102沒有記錄QID 3。還有另外一張表Q

QID Value 
1  Name 
2  Email 
3  Site 

我要的是,爲每一個用戶,他們是否回答的問題或沒有(即,天氣一進入退出在A表或沒有),我想對所有用戶和他們的回答所有問題。像這樣的東西。

QID QValue  UserID  Value 
1  Name  100  A 
2  Email  100  B 
3  Site  100  C 
1  Name  101  AA 
2  Email  101  BB 
3  Site  101  CC 
1  Name  102  AAA 
2  Email  102  BBB 

什麼問題一行從期望的輸出缺失,那就是

3  Site  102  NULL 

因爲對於用戶102存在A表中沒有條目。我嘗試了LEFT JOIN,但顯然它不會給出所需的結果,因爲所有左表已經在那裏。並且INNER JOIN也不起作用。

它也完全有可能的答案表(表A)有這樣

QID QValue  UserID  Value 
1  Name  100  A 
2  Email  101  BB 
3  Site  102  CCC 

說數據,所有用戶只要填寫了一個記錄,在這種情況下所需的輸出是這樣的

QID QValue  UserID  Value 
1  Name  100  A 
2  Email  100  NULL 
3  Site  100  NULL 
1  Name  101  NULL 
2  Email  101  BB 
3  Site  101  NULL 
1  Name  102  NULL 
2  Email  102  NULL 
3  Email  102  CCC 

如果我做了LEFT JOINQID它不起作用。請建議應該做些什麼。

+1

你有什麼嘗試? 「如果我在QID上做了LEFT JOIN,它不起作用」是什麼意思?一些ddl和樣本數據如何? sqlfiddle.com是一個很好的開始。 –

+0

在沒有任何條件的情況下調查CROSS JOIN,您想要CROSS JOIN您的用戶和您的問題,並將您的答案留下。 – mxix

回答

1

試試這個:

declare @A table(QID int, UserID int, Value varchar(10)) 
declare @Q table(QID int, Value varchar(10)) 

insert into @A values (1, 100, 'A') 
insert into @A values (2, 100, 'B') 
insert into @A values (3, 100, 'C') 
insert into @A values (1, 101, 'AA') 
insert into @A values (2, 101, 'BB') 
insert into @A values (3, 101, 'CC') 
insert into @A values (1, 102, 'AAA') 
insert into @A values (2, 102, 'BBB') 

insert into @Q values (1, 'Name') 
insert into @Q values (2, 'Email') 
insert into @Q values (3, 'Site') 

select 
    U.UserID, 
    Q.QID, 
    Q.Value as QValue, 
    A.Value 
from 
    (select distinct UserID from @A) U -- all Users 
    cross join @Q Q -- all Questions 
    left outer join @A A on A.UserID = U.UserID and A.QID = Q.QID 

所以基本上你做的所有問題和所有用戶之間的cross join第一個獲得所有組合。然後你拿這個結果,並做一個left join與所有的答案。缺少答案將在Value(真實答案)字段中有NULL值。