有一个SQL查询,它需要将一个数字从用户输入匹配到多个列,然后再匹配到其他表上的列

有一个SQL查询,它需要将一个数字从用户输入匹配到多个列,然后再匹配到其他表上的列,sql,sql-server,Sql,Sql Server,我有一个查询,它接受用户上传的csv,并与我的sql表上的数字匹配。这是下面列出的。它工作正常,但我需要另一个查询来执行类似的操作 我现在需要一个选择(而不是更新)的查询。此查询将用于我的aspx页面。用户将输入零件号,然后我将显示与零件号匹配的公司以及所有其他详细信息。流程如所附图片所示 我已经尝试了很多方法来让它发挥作用。我已经做了很多研究,只是对sql不够精通,不足以把这些结合起来 这是用户上载其csv文件时使用的查询 UPDATE imports SET imports.AMIPart

我有一个查询,它接受用户上传的csv,并与我的sql表上的数字匹配。这是下面列出的。它工作正常,但我需要另一个查询来执行类似的操作

我现在需要一个选择(而不是更新)的查询。此查询将用于我的aspx页面。用户将输入零件号,然后我将显示与零件号匹配的公司以及所有其他详细信息。流程如所附图片所示

我已经尝试了很多方法来让它发挥作用。我已经做了很多研究,只是对sql不够精通,不足以把这些结合起来

这是用户上载其csv文件时使用的查询

UPDATE imports 
SET imports.AMIPartNumber = 
coalesce(AMIA.Item,AMIB.Item,AMIC.Item,AMID.Item,AMIE.Item), 
Imports.AMIDescription = 
coalesce(AMIA.Description,AMIB.Description,AMIC.Description,AMID.Description,AMIE.Description) 
FROM imports as I 
LEFT JOIN JD as JDA 
ON I.OEMPartNumber = JDA.OEMPartNumber 
LEFT JOIN amipartnumbers as AMIA 
ON JDA.OEMPartNumber = AMIA.OEMItem 
LEFT JOIN JD as JDB 
ON I.OEMPartNumber = JDB.OEMSubNumber 
LEFT JOIN amipartnumbers as AMIB 
ON JDB.OEMSubNumber = AMIB.OEMItem 
LEFT JOIN JD as JDC 
ON I.OEMPartNumber = JDC.OEMSubNumber2 
LEFT JOIN amipartnumbers as AMIC 
ON JDB.OEMSubNumber2 = AMIC.OEMItem 
LEFT JOIN JD as JDD 
ON I.OEMPartNumber = JDD.OEMSubNumber3 
LEFT JOIN amipartnumbers as AMID 
ON JDB.OEMSubNumber2 = AMID.OEMItem 
LEFT JOIN JD as JDE 
ON I.OEMPartNumber = JDE.OEMSubNumber4 
LEFT JOIN amipartnumbers as AMIE 
ON JDB.OEMSubNumber2 = AMIE.OEMItem ;

select * from imports
这是我试图做的事情的流程(供参考,图片中的AMI是上面查询中的AMIPartNumber)
好的,像这样的

SELECT *
FROM JD AS JDA
LEFT JOIN amipartnumbers as AMIA ON JDA.OEMPartNumber = AMIA.OEMItem 
LEFT JOIN amipartnumbers as AMIB ON JDA.OEMSubNumber = AMIB.OEMItem 
LEFT JOIN amipartnumbers as AMIC ON JDA.OEMSubNumber2 = AMIC.OEMItem 
LEFT JOIN amipartnumbers as AMID ON JDA.OEMSubNumber3 = AMID.OEMItem 
LEFT JOIN amipartnumbers as AMIE ON JDA.OEMSubNumber4 = AMID.OEMItem 
WHERE OEMPartNumber = @userInput
   OR OEMSubNumber = @userInput
   OR OEMSubNumber2 = @userInput
   OR OEMSubNumber3 = @userInput
   OR OEMSubNumber4 = @userInput
或者你只想参加一场比赛?我会这样做:

  SELECT *
  FROM JD 
  LEFT JOIN amipartnumbers A ON JD.OEMPartNumber = A.OEMItem 
  WHERE JD.OEMPartNumber = @userInput
UNION ALL 
  SELECT *
  FROM JD 
  LEFT JOIN amipartnumbers A ON JD.OEMSubNumber = A.OEMItem 
  WHERE JD.OEMSubNumber = @userInput
UNION ALL 
  SELECT *
  FROM JD 
  LEFT JOIN amipartnumbers A ON JD.OEMSubNumber2 = A.OEMItem 
  WHERE JD.OEMSubNumber2 = @userInput
UNION ALL 
  SELECT *
  FROM JD 
  LEFT JOIN amipartnumbers A ON JD.OEMSubNumber3 = A.OEMItem 
  WHERE JD.OEMSubNumber3 = @userInput
UNION ALL 
  SELECT *
  FROM JD 
  LEFT JOIN amipartnumbers A ON JD.OEMSubNumber4 = A.OEMItem 
  WHERE JD.OEMSubNumber4 = @userInput
试试这个:

DECLARE @jd TABLE (
   [OEMPartNumber] int, 
   [OEMSubNumber] int, 
   [OEMSubNumber2] int,
   [OEMSubNumber3] int
)

INSERT INTO @jd
   SELECT [OEMPartNumber], [OEMSubNumber], [OEMSubNumber2], [OEMSubNumber3]
   FROM [JD]
   WHERE 
      [OEMPartNumber] = @enterNumber OR
      [OEMSubNumber] = @enterNumber OR
      [OEMSubNumber2] = @enterNumber OR
      [OEMSubNumber3] = @enterNumber

SELECT ami.[Item], ami.[Description] FROM [AMI] ami
   JOIN @jd ON (
      ami.[OEMItem] = [@jd].[OEMPartNumber] OR
      ami.[OEMItem] = [@jd].[OEMSubNumber] OR
      ami.[OEMItem] = [@jd].[OEMSubNumber2] OR
      ami.[OEMItem] = [@jd].[OEMSubNumber3]
   )

我终于成功了。现在,无论用户搜索什么OEMPartNumber、OEMSubNumber、OEMSubNumber2等,它都将匹配到OEMItem并返回AMI.Item

这种交叉应用技术成功了。而且很快。只需几秒钟即可返回结果

declare @Seek as varchar(20)
set @seek = '" & enterNumber & "'

select
*
from amipartnumbers as APN 
left join (
            select *
            from JD
            cross apply (
                values 
                 (1, OEMPartNumber )
                ,(2, OEMSubNumber )
                ,(3, OEMSubNumber2)
                ,(4, OEMSubNumber3)
                ,(5, OEMSubNumber4)
              ) as xapply (lvl, OEMRef)
           ) JDT on APN.OEMItem = JDT.OEMRef
where OEMPartNumber = @Seek
or OEMSubNumber    = @seek
or OEMSubNumber2   = @seek
or OEMSubNumber3   = @seek
or OEMSubNumber4   = @seek

获取此错误时,无法绑定多部分标识符“JDB.OEMSubNumber”。无法绑定多部分标识符“JDB.OEMSubNumber2”。多部分标识符“JDB.OEMSubNumber2”无法绑定。@Bignadad-好的,我想我得到了所有的拼写错误。如果OEMPartNumber与OEMItem匹配,您的第一次代码游戏将产生结果,但是如果OEMSubNumber2或OEMSubNumber2与OEMItem匹配,则不会工作。现在尝试第二个查询在第二个查询上,似乎与另一个问题相反。只有OEMSubNumber与OEMItem匹配。OEMPartNumber与OEMItemi不匹配。我在microsoft sql server studio中尝试了此操作,但在上次选择时出错。说“必须声明标量变量@jdnoad,我自己在SSMS中模拟了它,发现@jd表引用周围需要一些方括号。希望这有帮助!