MySQL使用一个表的参数从多个表中选择数据

时间:2014-02-04 19:01:21

标签: mysql sql select

我正在尝试从4个表中获取数据,如下所示 -

tblBookId -(shelfNo,BookId)
tblBookGenDetail - (BookId,Publish,Catogary,Rating)
tblPhysicalDetails - (BookId,BookWgt,BookPages,BookDia)
tblPriceTags-(BookId,India,US,UK,Aus)
tblBookAuthorDetails - (BookId,author,firstReleased,Reprints,authorRating)

现在我正在尝试使用shelfNo获取特定书架中存在的所有书籍的数据。在tabBookId

我正在使用此查询来获取数据 -

SELECT tblBookId.BookId ,tblBookGenDetail.* , tblPhysicalDetails.* , 
  tblPriceTag.* , tblBookAuthorDetails.*  
FROM tblBookId 
INNER JOIN tblBookGenDetail 
  ON tblBookId.BookId = tblBookGenDetail.BookId 
INNER JOIN tblPhysicalDetails 
  ON tblBookGenDetail.BookId = tblBookGenDetail.BookId 
INNER JOIN tblPriceTags 
  ON tblPriceTags.BookId = tblBookGenDetail.BookId 
INNER JOIN tblBookAuthorDetails 
  ON tblBookAuthorDetails.BookId = tblPriceTags.BookId 
WHERE (tblBookId.shelfNo = @shelfNo);

此查询运行正常并创建所有列而没有任何错误,但它没有显示任何数据。

我不知道我是否可以使用此方法检索数据或者我想要它。但我尝试了很多方法,这是更接近解决方案。

注意 - 在我编辑它之前,没有看到星号。 我自己在这里输入所有内容,所以可能会发现一些syntex错误,但在我的代码中它工作正常。

2 个答案:

答案 0 :(得分:1)

您的查询存在的一个问题是JOINtblPhysicalDetails表。你需要加入它的bookid。

改变这个:

INNER JOIN tblPhysicalDetails ON 
    tblBookGenDetail.BookId = tblBookGenDetail.BookId 

INNER JOIN tblPhysicalDetails ON 
    tblPhysicalDetails.BookId = tblBookGenDetail.BookId 

如果每个表中都没有所有数据,您可能还需要考虑使用OUTER JOIN而不是INNER JOINs。有关更多详细信息,请参阅以下链接:

答案 1 :(得分:0)

如果我是你,我不会使用所有的连接。

我通常使用的是:

$shelfno = '101';
SELECT BookId, shelfNo, Publish, Catogary, Rating, BookWgt, Bookpages, BookDia, India, US, UK, Aus, author, firstReleased, Reprints, authorRating
FROM tblBookId, tblBookGenDetail, tblPhysicalDetails, tblPriceTags, tblBookAuthorDetails
WHERE tblBookId.BookId = tblBookGenDetail.BookId 
AND tblBookId.BookId = tblPhysicalDetails.BookId
AND tblBookId.BookId = tblPriceTags.BookId
AND tblBookId.BookId = tblBookAuthorDetails.BookId
AND shelfNo = '$shelfno'

但那就是我喜欢的。

顺便问一下:你知道你有'Catogary'吗?只是你知道......

如果您了解它的作用,也许您可​​以使用它:)。如果您需要解释,我很乐意提供帮助。