首页 文章

插入一个表值进行查询

提问于
浏览
0

myTbl 具有值

ID  Number
1    12458
2    45896  
3    12458
4    87456

有如下查询:

SELECT TOP 1 n.abonent_name , ad.address
FROM dbo.names n 
INNER JOIN dbo.addresses ad on n.address_id = ad.id
WHERE n.number = (every number from myTbl)

想从myTbl插入查询 Where clause 每个数字,然后将每个数字的响应插入虚拟表 #tbl ,例如 insert into #tbl abonent_name and address where number = 12458 ,在此插入之后,在where子句中写入另一个数字45896然后插入#tbl等等 .

CREATE TABLE #tbl
(
   id identity(1,1),
   abonent_name varchar(20),
   address varchar(50)
)

想要没有光标写它

2 回答

  • 0
    SELECT TOP 1 n.abonent_name , ad.address
    FROM dbo.names n 
    INNER JOIN dbo.addresses ad on n.address_id = ad.id
    WHERE n.number IN (SELECT number from myTbl)
    

    试试上面 . 但是你可以通过以下方式一举两得

    SELECT  ROW_NUMBER() OVER (order by n.abonent_name) AS ID, n.abonent_name , ad.address
    INTO #tbl
    FROM dbo.names n 
    INNER JOIN dbo.addresses ad on n.address_id = ad.id
    WHERE n.number IN (SELECT number from myTbl)
    
  • 1

    您不需要使用游标 . 如果 addresses 表中每个名称可以有多于1行,则可以使用以下模式:

    INSERT INTO #tbl (abonent_name, address)
    SELECT x.abonent_name, x.address
    from
    (
        SELECT
          ROW_NUMBER() OVER (PARTITION BY n.abonent_name
                             ORDER BY n.abonent_name, x.address) AS RowNumber,
          n.abonent_name,
          ad.address
        FROM dbo.names n 
        INNER JOIN myTbl tbl on n.number = tbl.number
        INNER JOIN dbo.addresses ad on n.address_id = ad.id
    ) x
    where x.RowNumber = 1
    order by x.RowNumber;
    

    此代码将在 #tbl 表中插入 myTbl 表中存在的每个名称的第一个(字母)地址 . 名称将按字母顺序升序排序 . 条件 x.RowNumber=1 将在多个匹配的情况下过滤第一个地址 .

相关问题