0

这是我第一次在这里发帖。我正在使用以下关系模式创建 SQL 数据库


作者(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_ID、Product_Name、Product_Cost、Comic_ID、Vendor_ID)

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

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

供应商(供应商 ID、供应商名称、供应商地址、网站 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 个表放在一起的查询。现在,这是我创建的查询情况之一。

“列出同时托管漫画和供应商的每个网站的名称”,我已向其中写入以下查询:


从网站中选择 Web_Name

内部加入漫画 on Website.Website_ID = Comic.Website_ID

在 Website.Website_ID 上的 INNER JOIN 供应商 = Vendor.Website_ID;


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

感谢您的时间。

4

1 回答 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)

这就是说:在有漫画的网站列表和有供应商的网站列表中,把网站所在的所有网站名称都给我。

于 2013-04-04T02:52:48.330 回答