这是我第一次在这里发帖。我正在使用以下关系模式
创建一个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?如果查询情况应该“列出共享网站的每个漫画和供应商的名称?”当涉及内部和外部联接时,我有点迷失,所以我遇到涉及它们的查询有问题。
感谢您的时间。
答案 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)
这就是说:让我看看网站所在的所有网页名称,这些网站位于拥有漫画的网站列表和拥有供应商的网站列表中。