我有三个表Product,MapCatProduct,Category。
表定义:
表1:产品
Column 1: int ProductID (PK)
Column 2: nvarchar(255) Name
表2:MapCatProduct
Column 1: int MapCatProductID (PK)
Column 2: int ProductID(FK)
Column 3: int CategoryID(FK)
映射表:类别
Column 1: int CategoryID (PK)
Column 2: nvarchar(255) Name
我希望在输入ProductID时选择Product table参数和categoryID此参数等于所有结果。
用于eaxample: (InputParameters)ProductID = 14
结果:
ProductID = 14 CategoryID = 2
ProductID = 34 CategoryID = 2
ProductID = 63 CategoryID = 2
通知: 一个productID可能有' n'类别ID
我的代码是:
SELECT p.Id,p.Name FROM Product p
WHERE p.Id = @Id --input parameter
UNION
(SELECT TOP 5 p.Id,p.Name FROM Product p
INNER JOIN MapCatProduct mcp
ON p.Id = mcp.ProductId
INNER JOIN Category c
ON c.Id = mcp.CategoryId)
答案 0 :(得分:1)
首先应将这些外键的类型更改为外表中使用的相同类型。在这种情况下INT。
对于只保留整数的列,不需要使用大的nvarchar。
之后,您可以将地图表加入其他2个表格 例如:
select
prod.ProductID, cat.CategoryID,
prod.Name as ProductName, cat.Name as CategoryName
from MapCatProduct map
join Product prod on prod.ProductID = map.ProductID
join Category cat on cat.CategoryID = map.CategoryID
where map.CategoryID in (
select distinct CategoryID
from MapCatProduct
where ProductID = @ProductId
)
但是,当然,如果你只需要id,那么只从地图表中选择就足够了。
select ProductID, CategoryID
from MapCatProduct
where CategoryID in (
select distinct CategoryID
from MapCatProduct
where ProductID = @ProductId
)
答案 1 :(得分:0)
您希望输入ProductID
位于同一类别中的所有ProductID
?
SELECT ProductID, CategoryID
FROM MapCatProductID
WHERE CategoryID =
(SELECT DISTINCT CategoryID
FROM MapCatProductID
WHERE ProductID = <input Param>)