我正在嘗試在 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
我嘗試使用以下查詢,但它僅檢查 James。如何更改我的查詢,以便它檢查所有名稱并回傳預期結果。
select * FROM employees
where first_name like '%James%'
and wife_name like '%Sue%'
and pincode=101011;
這方面的任何提示都會非常有幫助。我是新加入的,需要幫助撰寫自我加入以獲得結果。
uj5u.com熱心網友回復:
…
select *
from thetable as p -- the parent/father
where exists -- with one child at least
(
select *
from thetable as c
where c.fathername = p.name
and c.mothername = p.wifename
-- lastname?
)
uj5u.com熱心網友回復:
太長的評論,但也不打算作為對你正在使用的東西的抨擊。請作為建設性的批評。
除了表格內容的設計非常糟糕之外,在您深入了解您正在做的任何事情之前,首先應該先完成糾正。一個更典型的設計可能是有一張人桌。現在,要獲得關系,您可以采取幾種方式。一是在每個人的記錄上,您添加 2 個額外的 ID。父親ID,母親ID。這些 ID 將直接連接回孩子與要匹配的硬字串。取一個像史密斯或瓊斯這樣的姓氏。然后,看看“約翰史密斯”可能存在的許多實體,是的很多,并且找到匹配妻子的名字 Sue、Mary 或其他任何名字的可能性較低。但即使這樣也可能導致多種可能性。是的,您正在添加 PIN,但即使是計算機也可以生成 1234 的隨機 PIN。
通過擁有 ID,與誰建立關系就不會模棱兩可了。
如果資料稍微更改為類似
Id Name Surname FatherID MotherID SpouseID
-- ------- ------- ---------- ---------- --------
1 John Green 5 6 null
2 Michael Sloan 4 3 null
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 Bill Jones 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 Barry 和#3 Lilly 的父母。
我還添加了配偶 ID。這可以防止重復復制的人名的冗余。然后您可以根據孩子的父母各自的ID進行查詢,以找出一個有希望的名字LIKEguess。
因此,即使不解決相對簡單的查詢,修復資料庫的底層基礎和關系也將長期幫助您在未來簡化查詢。
uj5u.com熱心網友回復:
試試這個:
SELECT
T2.*
FROM Employee T1
JOIN Employee T2 ON T2.Name = T1.FatherName
AND T2.WifeName = T1.MotherName
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/419939.html
標籤:
