WHERE子句(多个表)

时间:2018-04-13 03:54:31

标签: mysql asp.net

我正在研究一个项目,我正试图从数据库中获取回报。我是网页设计和ASP.net的新手,所以我不确切地知道如何说出我的问题,但我会尽力解释它。我有一个返回authorID的下拉列表,我试图用它在屏幕上显示信息。

这里我正在使用的所有表格(第一行将是表格的标题,数据名称下方的点数与*语句中的*表示,以帮助可视化)

Authors:
    authorID
 *  firstName
 *  lastName

AuthorISBN:
    ISBN
    authorID

Titles:
 *  ISBN
 *  title
 *  editionNumber
    description
    publisherID
    copyright
    imageFile
 *  price


Publishers:
    publisherID
 *  publisherName

到目前为止,我在SELECT语句中得到了什么。

SELECT  Authors.firstName, Authors.lastName, Titles.ISBN, Titles.title, 
        Publishers.publisherName, Titles.price, Titles.editionNumber

FROM    (((Authors INNER JOIN AuthorISBN ON Authors.authorID = 
        AuthorISBN.authorID) INNER JOIN Titles ON AuthorISBN.ISBN = 
        Titles.ISBN) INNER JOIN Publishers ON Titles.publisherID = 
        Publishers.publisherID)

现在在以前的一个项目中遇到了与我使用过的类似问题(但只有一个表)

WHERE (CategoryID = @CategoryID)

然后asp.net弹出另一个窗口让我选择输入源;但是这个任务没有编译

WHERE (authorID = @authorID)

因为authorID在多个表中。我不知道语法如何或确切地如何工作来做我想做的事情。如果它的相关性,下拉列表ID是ddlAuthors,它从Authors表中返回值authorID。

感谢任何花时间阅读或回复的人。

2 个答案:

答案 0 :(得分:0)

由于有几个表具有相同的列,因此对于要应用此过滤器的表格存在歧义。

要解决此问题,您可以指定表名。列名以消除此歧义。

在您的情况下,如果这是您想要应用过滤器的表,请使用Authors.authorid = @authorid

答案 1 :(得分:0)

SELECT a.firstName, a.lastName, t.ISBN, t.title, 
        p.publisherName, t.price, t.editionNumber

FROM Authors a, AuthorISBN aisbn, Titles t, Publishers p

WHERE a.authorID = aisbn.authorID
AND a.authorID = ${your author ID from the dropdown}
AND aisbn.ISBN = t.ISBN
AND t.publisherID = p.publishedID

如果您对长INNER JOIN有任何问题,这是一种更简单的理解方法(最好将SQL分开,以便您可以更好地阅读它并确保您加入您想要的内容/位置)。如果以上工作,请告诉我。我可能没有回答你关于传递参数部分的问题(在这种情况下我误解了你的问题)。如果这不能回答这个问题,请告诉我,因为这是基本的SQL(我不熟悉asp.net)。