SQL Inner Join 3表

时间:2013-04-04 02:35:34

标签: sql

这是我第一次在这里发帖。我正在使用以下关系模式

创建一个SQL数据库

AUTHOR(Author_ID,Author_Name,Author_Address)

网站(Website_ID,Web_Name,Server_Capacity,ISP)

COMIC(Comic_ID,Comic_Name,Comic_Date,Author_ID,Website_ID)

FK Author_ID → AUTHOR (not Null), (not Unique)
               Delete: C, Update: C

FK Website_ID → WEBSITE (not Null), (not Unique)
               Delete: C, Update: C

ISSUE(Issue_ID,Issue_Name,Issue_Date,Comic_ID)

FK Comic_ID → COMIC (not Null), (not Unique)
             Delete: C, Update: C

PRODUCT(Product_ID,Product_Name,Product_Cost,Comic_ID,Vendor_ID)

FK Comic_ID→COMIC(非空),(非独特)                              删除:C,更新:C

    FK Vendor_ID → VENDOR (not Null), (not Unique)
                         Delete: C, Update: C

供应商(Vendor_ID,Vendor_Name,Vendor_Address,Website_ID)

FK Website_ID → WEBSITE (Null), (not Unique)
                     Delete: N, Update: C

合同(Contract_ID,Contract_Date,Author_ID,Vendor_ID)

FK Author_ID → AUTHOR (not Null), (not Unique)
               Delete: C, Update: C

FK Vendor_ID → VENDOR (not Null), (not Unique)
                   Delete: C, Update: C 

我知道这很多,但这里有一个具体的问题;我需要创建几个INNER JOIN 3个表一起的查询。现在,这是我创建的查询情况之一。

“列出同时拥有漫画和供应商的每个网站的名称” 我写了以下查询:


SELECT Web_Name FROM Website

网站上的INNER JOIN漫画.Website_ID = Comic.Website_ID

网站上的INNER JOIN供应商.Website_ID = Vendor.Website_ID;


此查询是否正确使用3个表的INNER JOIN?如果查询情况应该“列出共享网站的每个漫画和供应商的名称?”当涉及内部和外部联接时,我有点迷失,所以我遇到涉及它们的查询有问题。

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

我没有足够的声誉来评论,所以我会回答这个问题。 :)

您提供的示例查询将返回同时包含漫画和供应商的每个网站。

当我学习正确的连接技术时,这个网站帮了我很大的忙。我喜欢能够想象事物。 http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

答案 1 :(得分:0)

您的查询将返回包含漫画和供应商的每个网站。 。 。但多次。解决此问题的一种方法是添加distinct

SELECT distinct w.Web_Name
FROM Website w INNER JOIN
     Comic c
     on w.Website_ID = c.Website_ID inner join
     Vendor v
     on w.Website_ID = w.Website_ID;

我还在表中添加了别名,因为它使查询更具可读性。

还有其他方法可以做到这一点。这是一种方式:

select w.WebName
from Website w
where w.Website_Id in (select WebSite_Id from Comics) and
      w.Website_In in (select WebSite_Id from Vendor)

这就是说:让我看看网站所在的所有网页名称,这些网站位于拥有漫画的网站列表和拥有供应商的网站列表中。