2010-10-26 111 views
1

我不断收到一个错误,指出某个特定的列,不存在b.BookCode但我完全意识到它确实存在!我只是想在长时间注视这件事情之后确保我不会错过任何明显的事情。关于SELECT的SQL语法

SELECT AuthorLast, AuthorFirst, OnHand, Title 
FROM (Inventory i, Author a, Book b) 
WHERE (i.BookCode = b.BookCode AND b.AuthorNum = a.AuthorNum); 

我很新的SQL所以我不能确定我的语法是关闭的,而且我需要,我在SELECT提到的列加上括号。起初我在他们身边有括号,并且出了错误,并且为什么会感到困惑。

谢谢!

+0

显示您的模式。 – 2010-10-26 02:52:32

回答

0

您正在使用旧的连接语法,您应该使用INNER JOIN来代替。

SELECT AuthorLast, AuthorFirst, OnHand, Title 
FROM Inventory i 
INNER JOIN Author a 
    USING (BookCode) -- You can also use ON, but USING remove the ambiguous columns 
INNER JOIN Book b 
    USING (AuthorNum); -- Same thing here 

如果您收到错误消息说不存在一列,那么您应该仔细检查它。为了这个原因,MySQL不会骗你!例如,您可能会在过时的数据库上执行查询。

+0

ahhh我是个傻瓜,我刚刚意识到有一张关系表,既有作者也有书的主键。在这种情况下我会使用外连接吗? – rajh2504 2010-10-26 02:53:30

+0

外连接只有在左(或右)表中有日期时才有用,并且即使没有任何内容加入右(或左)表中,也想要连接这些行。您可以使用INNER JOIN加入另一个表格,它应该可以工作! – 2010-10-26 02:58:17

0

至少,你应该更改为:

SELECT AuthorLast, AuthorFirst, OnHand, Title 
FROM Inventory i, Author a, Book b 
WHERE i.BookCode = b.BookCode AND 
     b.AuthorNum = a.AuthorNum; 

...这是假设在你的SELECT语句的SELECT部分​​列也不含糊(即在一个以上的发现FROM部分中的表)。