2013-03-12 17 views
1

我有3个表,具体如下:内从多个表中加入

Patron 
====== 
patron_num 


Booking_For_Schedule 
==================== 
tname 
date 
time 
booking_num 

Booking_By_Patron 
================= 
booking_num 
patron_num 

我想检索与列patron_numdatetime,并tname结果,像这样:

patron_num  date  time  tname 
    1  2013-11-03 20:00 TestName 

...等

这个家庭作业问题的目的是教我们INNER JOINS,但我有一些困难。可能有某种用户将我推向正确的方向?

这里是我的SQL:

SELECT `patron_num`,`date`,`time`,`tname` 
FROM `booking_for_schedule` `F` 
INNER JOIN `booking_by_patron` `B` on `F`.`booking_num` = `B`.`booking_num` 
INNER JOIN `patron` `P` on `B`.`patron_num`=`P`.`patron_num` 

返回错误:#1052 - Column 'patron_num' in field list is ambiguous

+1

我的推动是学会阅读错误信息。你得到的那个非常明确。这并非总是如此。 – 2013-03-12 00:06:21

+0

您与其他人在下面指出的内容非常接近。当你想到为什么定义你从哪张桌子上拉出来很重要时,问问你自己是否有可能没有赞助人的话题?或者可能是没有booking_by_patron的booking_num?当你了解外部连接(左,右,完整)时,这将变得很重要,我相信这些连接可以很好地解释[这里](http://www.codinghorror.com/blog/2007/10/a-visual-explanation -of-sql-joins.html) – xQbert 2013-03-12 00:09:49

+0

@xQbert感谢您的链接! – 2013-03-12 00:54:27

回答

1
SELECT `P`.`patron_num`,`date`,`time`,`tname` 
FROM `booking_for_schedule` `F` 
INNER JOIN `booking_by_patron` `B` on `F`.`booking_num` = `B`.`booking_num` 
INNER JOIN `patron` `P` on `B`.`patron_num`=`P`.`patron_num` 

将有助于歧义。

+0

谢谢!我认为我的问题是我认为patron_num不应该含糊不清,因为我的内部连接在两个patron_num上是平等的。 – 2013-03-12 00:54:55

1

由于patron_num在多个表中,您需要指定要使用哪一个。你可以通过添加表之前的表别名,就像你在连接中一样。例如:

SELECT `B`.`patron_num`,`date`,`time`,`tname` 
FROM `booking_for_schedule` `F` 
INNER JOIN `booking_by_patron` `B` on `F`.`booking_num` = `B`.`booking_num` 
INNER JOIN `patron` `P` on `B`.`patron_num`=`P`.`patron_num`