我有这张表People,Ticket和Report。
+----------+-------+-----+
| idPeople | Name | Age |
+----------+-------+-----+
| 1 | Name1 | 21 |
| 2 | Name2 | 37 |
| 3 | Name3 | 28 |
+----------+-------+-----+
我想用People表中的Name和Age列替换ForeingKey idPeople。
+----------+------------+------------+----------+
| idTicket | ticketCol2 | ticketCol3 | idPeople |
+----------+------------+------------+----------+
| 5 | True | 01/06/99 | 1 |
| 6 | False | 01/06/99 | 2 |
| 7 | True | 01/06/99 | 4 |
+----------+------------+------------+----------+
在“报表”表中,将前一张表“票证”中的“前导密钥” idTicket替换为“ ticketCol2”,“名称”和“年龄”,并替换列(“ idPeople by Name,Age”)。
+----------+----------+------------+------------+
| idReport | idTicket | ReportCol3 | ReportCol4 |
+----------+----------+------------+------------+
| 1 | 5 | 01/06/99 | blabla |
| 2 | 7 | 01/06/99 | asdfdd |
| 2 | 6 | 01/06/99 | fooboo |
+----------+----------+------------+------------+
我的结果应该像这张表,并且必须在一个查询中完成。
+----------+------------+------------+------------+------------+------+-----+
| idReport | ticketCol2 | ticketCol3 | ReportCol3 | ReportCol4 | Name | Age |
+----------+------------+------------+------------+------------+------+-----+
| 1 | 01/06/99 | abcd | blabla | 123456 | Name | 20 |
| 2 | 01/06/99 | bcda | asdfdd | 321456 | Name | 23 |
| 3 | 01/06/99 | asdf | fooboo | 123456 | Name | 28 |
+----------+------------+------------+------------+------------+------+-----+
我尝试用LEFT JOIN替换前键并将“名称”和“年龄”列带到“票证”表中,但是现在我应该用“票证中的列”替换idTicket的最后一部分不起作用。
我已经阅读了有关嵌套JOIN的文章,但是我不太了解它,我真的很感谢我如何做或应该研究什么的一些想法。嵌套联接是否正确?
我尝试完成表格票证的查询。
SELECT Ticket.ticketCol2, Ticket.ticketCol3, p.Name 'Name', p.Age 'Age'
from Ticket
left join people p on (Ticket.idPeople=p.idPeople);
答案 0 :(得分:2)
尝试这样的事情:
SELECT Report.idReport,
Ticket.ticketCol2,
Ticket.ticketCol3,
Report.ReportCol3,
Report.ReportCol4,
People.Name,
People.Age
FROM People
LEFT JOIN Ticket ON Ticket.idPeople = People.idPeople
LEFT JOIN Report ON Report.idTicket = Ticket.idTicket
像 @RiggsFolly 一样,Ticket.idPeople
与People.idPeople
不匹配,因此不会匹配任何行。