2017-07-28 22 views
0

如果一個人的一個人沒有一行,如果他們全都被編譯,是否有返回的方式(見下表)。從理論上講,我希望是代碼的結果是返回SQL Server - 有沒有辦法通過行比較(有多個約束)來查找哪些不存在?

Name  State Subject 
Doe, John TX History 

我應該增加一個新的列到我的表2或其他表一起,可以橫走,幫我獲得這樣的結果?

現在我有它通過選擇所有在哪裏主題= blah多個表格,但我希望能夠保持大桌子在一起,因爲有大約10個主題經過。

TBL1

Name State Subject Grade 
Doe, John TX Math 0.45 
Doe, John TX Science 0.85 
Doe, Jane MS Math 0.45 
Doe, Jane MS Science 0.85 
Doe, Jane MS History 0.75 

TBL2

Doe, John TX 
Doe, Jane MS 

感謝

+0

您需要進行標準化。 http://www.studytonight.com/dbms/database-normalization.php –

+0

這是一個非常糟糕的設計表。 – Eric

+0

@Eric這不是很有幫助的批評...它有什麼問題?我的意思是這個表格是一個非常簡單,非常簡單的表格,我使用的表格有很少的行和很少的列。我只想說,我有一張桌子,上面有我想和第一張桌子相匹配的學生和他們的國家,並找出丟失了什麼科目 – SkywalkerPadawan

回答

2

您可以通過使用一個cross join讓所有的組合,然後篩選出存在的那些做到這一點。例如:

select ns.*, s.* 
from (select distinct name, state from t) ns cross join 
    (select distinct subject from t) s 
where not exists (select 1 
        from t 
        where t.name = ns.name and t.state = ns.state and t.subject = s.subject 
       ); 
+0

你能否也請建議如何規範化這個表結構? –

+1

@PrabhatG:你需要提出一個新問題 – TheGameiswar

+0

我認爲這會起作用,但是當我只有兩張表時,我對ns,s和t變量感到困惑。 – SkywalkerPadawan

相關問題