请参阅我的ERD的这一部分:
从阅读器中,我得到了一个属于车轮的RFID。如何从tblProduct表中获取相应的ID。我知道如何使用许多SELECT语句来执行此操作,但这是最快的方法吗?我之所以这样问,是因为我在生成高效的QUERY语句方面经验不足。
我确实创建了一个函数来处理此问题:
CREATE FUNCTION [dbo].ufnGetProductIdFromRFID
(@StationRFID NVARCHAR(20))
RETURNS
INT
AS
BEGIN
DECLARE @ProductId INT = 0
DECLARE @WheelId INT = 0
SELECT @WheelId = [Id] FROM [dbo].[tblWheel] WHERE RFID = @StationRFID
SELECT @ProductId = [ProductId] FROM [dbo].[tblLinkWheelProduct] WHERE WheelId = @WheelId
RETURN @ProductId
END
GO
所以我执行两个查询。
我的问题:'JOIN'或其他某种构造会导致更有效的(更少的执行时间)解决方案吗?由于这两个SELECT语句非常简单,而且根本不耗时。.
已经感谢您和我一起思考!
答案 0 :(得分:0)
我将tblWheel加入到tblLinkWhelProduct到tblProduct中。您只需一个查询即可获取数据。我认为这是最好的方法:
select p.Id from tblWheel w
inner join tblLinkWheelProduct l on w.Id=t.WheelId
inner join tblProduct p on p.Id=l.ProductId
答案 1 :(得分:0)
通过这种方式,您可以从tblProduct
表中获取任何信息
select * from tblProduct p
where exists (
select 1 from tblLinkWheelProduct lwp
inner join tblWheel w
on w.Id = lwp.WheelId
where p.Id = lwp.ProductId and RFID = ?
)
如果您打算只获得productId
,
select productId from tblLinkWheelProduct lwp
where exists (
select 1 from tblWheel w
where w.id = lwp.WheelId
and w.RFID = ?
)