我有一个关于SQL查询的问题..我正在ASP.NET Visual Studio中构建原型网上商店。现在我正在寻找一种查看我的产品的解决方案。我在MS Access中构建了一个数据库,它由多个表组成。
对我的问题很重要的表是:
Below you'll see the relations between the tables
对我而言,获得三种数据类型非常重要:产品标题,价格和图像。
产品标题和价格位于Product
表中。图像位于Foto
表中。
因为产品可以有多张图片,所以它们之间存在N - M关系。所以我要拆分它,我在Productfoto
表中做了。
所以他们之间的联系是:
product.artikelnummer -> productfoto.artikelnummer
productfoto.foto_id -> foto.foto_id
然后我可以读取文件名(在数据库中:foto.bestandnaam
)
我已经创建了第一个内部联接,并在Access中进行了测试,这可行:
SELECT titel, prijs, foto_id
FROM Product
INNER JOIN Productfoto
ON product.artikelnummer = productfoto.artikelnummer
但是我需要另一个INNER JOIN
,我怎么能创造它?我想这样的事情(这个会给我一个错误)
SELECT titel, prijs, bestandnaam
FROM Product
(( INNER JOIN Productfoto ON product.artikelnummer = productfoto.artikkelnummer )
INNER JOIN foto ON productfoto.foto_id = foto.foto_id)
任何人都可以帮助我吗?
答案 0 :(得分:3)
这样的事情应该有效:
SELECT Product.titel, Product.prijs, Foto.bestandnaam FROM Product INNER JOIN
(Foto INNER JOIN Productfoto ON Foto.[foto_id] = Productfoto.[foto_id]) ON
Product.[artikelnummer] = Productfoto.[artikelnummer];
答案 1 :(得分:1)
关于使用链接表的一件事
ProductFoto表允许产品和Foto之间的N-M关系。这是你真正想要/需要的吗?换句话说,一个Foto可以属于多个产品吗?如果没有,请将Product_Id放在Foto表中。如果是这样,......
...让我们讨论加入。
假设我们有两个表,A和B.做一个
SELECT * FROM A, B
将为您提供A行与B行的所有排列。我们可以通过添加WHERE
子句来限制结果集,例如WHERE A.a='lekker hoor!'
或冷却器WHERE A.id=B.a_id
。实际上看起来像JOIN
结果!
让我们做一个正确的JOIN
然后:
SELECT * FROM A JOIN B ON A.id=B.a_id
JOIN
实际上是LEFT OUTER
,RIGHT OUTER
和FULL INNER
或FULL OUTER
加入的。
LEFT JOIN
(使用OUTER
是可选的)将包含左(第一)表中的所有记录,即使右(第二)表中没有相应的记录也是如此。 RIGHT JOIN
显然以相同的方式工作,但是镜像。FULL OUTER JOIN
两个表都是可选的(尽管与SELECT * FROM A, B
不完全相同!)。 FULL INNER
需要匹配两个表中的记录(这是默认值)。 如果您想要执行多个JOIN
,请说
SELECT * FROM
A
JOIN B ON A.id=B.a_id
JOIN C ON B.id=C.b_id
您可以将额外JOIN
视为通过加入A和B形成的中间表加入,尤其是在混合一些LEFT
/ RIGHT
/ INNER
/时OUTER
JOIN
s。
关于您的问题 使用
的内容SELECT TOP (1) titel, prijs, bestandnaam
FROM
( -- this bracket is MS Access specific (and awkward)
Product
INNER JOIN Productfoto ON product.artikelnummer = productfoto.artikelnummer
) -- this one too
INNER JOIN foto ON productfoto.foto_id = foto.foto_id
Veel成功,en doe jeeelf een plezier en 切换到英语!