我有SQL表来保存买家个人数据,例如FirstName,LastName,OGCard; OGCard - 表示客户个人卡号的字段。
接下来我有一张名为Cards的表格,其中包含以下格式购买的十件商品的数据:OGCard,Item1ID,...,Item10ID,Item1Quantity,...,Item10Quantity
在表格项目中,我得到了这样的结构ItemID,ItemName
我想从CardNumber购买所有商品
我想我应该做那样的事情
SELECT Buyers.FirstName, Items.Name, Cards.Item1Quantity
FROM Buyers
INNER JOIN Cards ON Buyers.OGCard=Cards.OGCard
INNER JOIN Items ON Cards.Item1ID=Items.ItemName
WHERE OGCard=13451
通过这种方式,我可以看到第一个项目的名称和数量。但是我无法对列Item2ID执行相同的连接,依此类推。你能给我一些解决方案吗?
答案 0 :(得分:6)
在不知道如何设置Items表的情况下,您可以这样做:
SELECT Buyers.FirstName
, Items.Name
, Cards.Item1Quantity
, C2.Item2Quantity
, C3.Item3Quantity
, C4.Item4Quantity
, C5.Item5Quantity
, C6.Item6Quantity
, C7.Item7Quantity
, C8.Item8Quantity
, C9.Item9Quantity
, C10.Item10Quantity
FROM Buyers
INNER JOIN Cards ON Buyers.OGCard=Cards.OGCard
INNER JOIN Items ON Cards.Item1ID=Items.ItemName
LEFT OUTER JOIN Items ON Cards.Item2D=Items.ItemName C2
LEFT OUTER JOIN Items ON Cards.Item3D=Items.ItemName C3
LEFT OUTER JOIN Items ON Cards.Item4D=Items.ItemName C4
LEFT OUTER JOIN Items ON Cards.Item5D=Items.ItemName C5
LEFT OUTER JOIN Items ON Cards.Item6D=Items.ItemName C6
LEFT OUTER JOIN Items ON Cards.Item7D=Items.ItemName C7
LEFT OUTER JOIN Items ON Cards.Item8D=Items.ItemName C8
LEFT OUTER JOIN Items ON Cards.Item9D=Items.ItemName C9
LEFT OUTER JOIN Items ON Cards.Item10D=Items.ItemName C10
WHERE OGCard=13451
没有表格布局,这只是一个猜测,我猜如果这有效,你需要看看架构是如何布局的......
答案 1 :(得分:4)
可以使用别名连接同一个表两次:
SELECT
Buyers.FirstName,
Items1.Name, Cards.Item1Quantity,
Items2.Name, Cards.Item2Quantity,
Items3.Name, Cards.Item3Quantity,
Items4.Name, Cards.Item4Quantity
FROM Buyers
INNER JOIN Cards ON Buyers.OGCard=Cards.OGCard
INNER JOIN Items AS Items1 ON Cards.Item1ID=Items.ItemName
INNER JOIN Items AS Items2 ON Cards.Item2ID=Items.ItemName
INNER JOIN Items AS Items3 ON Cards.Item3ID=Items.ItemName
INNER JOIN Items AS Items4 ON Cards.Item4ID=Items.ItemName
WHERE OGCard=13451
如果某些Items_n_ID
可能丢失,您可以使用LEFT JOIN
代替INNER JOIN
,这样您仍然可以获得现有值的结果。
但是我强烈建议您规范化数据库,而不是采用这种方法。