好的,所以我将尝试尽可能具体,但我的
MySQL技能非常弱.所以情况如下:
我有2张桌子:捐赠者和学生.捐赠者可以与他们想要的尽可能多的学生联系,每个学生可以与捐助者想要“声称”他们的捐助者联系.因此,如果我有一个学生莎莉,她可以让吉姆,一个捐赠者,杰夫,一个捐赠者,与她联系.所以,我把所有学生放在一张桌子上,把所有捐赠者放在另一张桌子里.我需要把它们放在一起,显示学生姓名,身份证和学生所有捐赠者的身份证.
目前我的表是:Donor与DonorID,FirstName,LastName,DonorType,StreetAddress等.然后学生:StudentID,FirstName,LastName和DonorID.但是,这只允许我将学生与一名捐赠者联系起来.所以,我想我需要制作一个转换表,允许我显示StudentID,FirstName(学生),LastName(学生)和DonorID,“声称”该学生并允许我复制StudentID和将不同的DonorID放在同一学生的第2,第3,第4,等等等条目中.
所以,我想我的问题是转换表如何在MySQL中运行;我相信我将需要使用JOIN功能并将两个表连接在一起但是在tizag.com上阅读之后我更加困惑.我使用过Access,当你创建一个转换表时,你可以从每个表中提取PK,并使用其他表中的两个键创建一个复合键,但我不太清楚如何在MySQL中这样做;它是否基本相同,我应该从每个表中拉出PK并将它们连接在第3个过渡表中?
最佳答案 马文是对的.
你需要三张桌子来解决这个问题.
捐赠者
DonorID
FirstName
LastName
DonorType
StreetAddress
etc.
学生
StudentID
FirstName
LastName
etc.
那你需要Student_Donor.这通常称为连接表,并实现多对多关系.
StudentID (PK) (FK to Student)
DonorID (PK) (FK to Donor)
DonorOrdinal
如果StudentID = 5有四个ID = 6,7,11,15的捐赠者,那么你就有这些行
StudentId DonorId DonorOrdinal
5 6 1
5 7 2
5 11 3
5 15 4
DonorOrdinal列允许您指定学生的主要捐赠者和次要捐赠者.我无法从你的问题中看出这是多么重要,但能够订购这些东西是有帮助的.请记住这一点:正式来说,SQL SELECT查询以不可预测的顺序返回行,除非您还指定了ORDER BY.
如果您想展示您的学生及其捐赠者,您将需要以下查询:
SELECT s.StudentID, s.FirstName, s.LastName,
sd.DonorOrdinal,
d.DonorType, d.DonorID, d.FirstName, d.LastName
FROM student s
LEFT JOIN student_donor sd ON s.StudentID = sd.StudentID
LEFT JOIN donor d ON sd.DonorID = d.DonorID
ORDER BY s.StudentID, sd.DonorOrdinal, d.DonorID
这将按照ID的顺序显示所有学生(无论是否有LEFT JOIN的捐赠者),然后按DonorOrdinal的顺序显示他们的捐赠者.