我試圖在MS SQL中查詢,但我無法解決這個問題。我有一個雇員表:
Id Name Surname FatherName MotherName WifeName Pincode isChild
-- ------- ---------- ---------- -------- ------- -------
1 John Green James Sue null 101011 1
2 Michael Sloan Barry Lilly null 101011 1
3 Sally Green Andrew Molly Jemi 101011 1
4 Barry Sloan Soul Paul Lilly 101011 0
5 James Green Ned White Sue 101011 0
我想要一個查詢,選擇孩子的父親名字和母親名字與名字和妻子名字相匹配的行。對于示例表,我想回傳父親和母親名字與姓名和妻子名字列相匹配的行的結果。例如,id=1,John的父親叫James,母親叫Sue,與id 5相匹配,回傳James作為名字,Sue作為妻子的名字。所以我的查詢應該回傳(這是我的預期結果)
。
Id Name Surname FatherName MotherName WifeName Pincode isChild
-- ------- ---------- ---------- -------- ------- -------
5 James Green Ned White Sue 101011 0
4 Barry Sloan Soul Paul Lilly 101011 0
我試著用下面的查詢,但它只檢查詹姆斯。如何改變我的查詢,使它檢查所有的名字并回傳預期的結果。
select * FROM employees
where first_name like '%James%'/span>
and wife_name like '%Sue%'
and pincode=101011;
在這方面的任何提示都將是非常有幫助的。我是連接的新手,需要幫助我寫出自我連接以獲得結果。
uj5u.com熱心網友回復:
...
select *
from thetable as p --父/母
where exists --至少有一個小孩。
(
select *
from thetable as c
where c.fathername = p.name
and c.motherername = p.wifename
-- lastname?
)
uj5u.com熱心網友回復:
評論太長了,但也不是為了抨擊你正在作業的東西。 請將其作為建設性的批評意見。
除了表格內容的設計非常糟糕之外,在你深入研究你的作業之前,應該先把它糾正過來。 一個更典型的設計可能是有一個人的表格。 現在,為了得到這些關系,你可以采取幾種方法。 一個是在每個人的記錄上,你添加兩個額外的ID。 父親ID,母親ID。 這些ID將直接連接到孩子,與硬字串進行匹配。 以史密斯或瓊斯這樣的姓氏為例。 然后,看看可能存在的許多 "約翰-史密斯 "的例子,是的,很多,找到一個匹配的妻子的名字蘇、瑪麗或其他名字的概率較低。 但即使如此,也可能導致多種可能性。 是的,你正在添加一個PIN碼,但即使是電腦也可以生成一個1234的隨機PIN碼。
通過擁有ID,與誰的關系就不會有任何模糊不清的地方。
如果將資料稍作改動,變成類似于
的東西Id Name Surname FatherID MotherID SpouseID
-- ------- ------- ---------- ---------- --------
1 John Green 5 6 null
2 Michael Sloan 4 3 null[/span
3 Lilly Sloan null null 4
4 Barry Sloan null null 3
5 James Green 9 10 6
6 Sue Green 7 8 5
7 比爾-瓊斯 null null 8
8 Martha Jones null null 7
9 Brian Green null null 10
10 Beth Smith-Green null null 9
所以,在這個修改后的例子中,你可以馬上看到ID#1 John Green的父母是父親(ID#5)是James,母親(ID#6)是Sue。 但即使如此,詹姆斯也是父親(ID#9)布萊恩和母親(ID#10)貝絲的孩子。 這種情況顯示的是祖父母級別的能力,而且詹姆斯和蘇也都是孩子,但都是他們各自父母的孩子。 蘇的父母是瓊斯姓。
對于邁克爾-斯隆,4號巴里的父母,以及3號莉莉的父母。
而且我還額外增加了一個配偶身份。 這可以防止人們的名字被到處復制的冗余現象。 然后你可以根據孩子的父母各自的ID進行查詢,找出與一個有希望的名字LIKE猜測。
因此,盡管沒有解決一個相對簡單的查詢,但從長遠來看,修復你的資料庫的底層基礎和關系,將有助于緩解你未來的查詢作業。
uj5u.com熱心網友回復:
試一下:
SELECT。
T2.*
FROM Employee T1
JOIN Employee T2 ON T2.Name = T1.fatherName
AND T2.WifeName = T1.MotherName
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314790.html
標籤:
下一篇:Mssql錯誤。列'dbo.History.Email'在選擇串列中無效,因為它不包含在聚合函式或GROUPBY子句中。
