2017-04-11 69 views
2

所以我有这个样子没有条款不打开查询过滤SQL服务器


Inventory表两张表(这只是拉空位置的列表)

|loc| 

|ECA001| 
_____ 

库存传输作业列表表

|id | oid | sku | from_loc | to_loc | tag | qty | processed | create_date | processed date 

|2 | 003 | 123 | SD034 | |T100010| 2 | NULL | 2017-04-06 | NULL 

___ 

我想要做的是填充Inventory_Transfer_Job_List_Table。 To_loc与我的第一个表&位置的下一个空位置不是已经在我的Inventory_Transfer_Job_List.to_loc表

我只是工作的select语句现在,以确保之前,我更新我将正确的数据使用。

我试图

select * from 
    (select loc from openquery(wms7,'SELECT lc_f.loc FROM lc_f left join iv_f on 
    lc_f.loc = iv_f.loc WHERE lc_f.loc like ''EC%'' AND lc_f.loc not in (select 
    loc from iv_f where loc like ''EC%'' OR loc = ''ECRETURNS'')')) as a , 
[db1].[dbo].[ECOM_Transfer_Inventory_Job_List] as b 
where to_loc = '' 
and a.loc not in (SELECT to_loc 
       FROM [db1].[dbo].[ECOM_Transfer_Inventory_Job_List] 
       WHERE to_loc != '') 

,但我只得到一个重复的值

ex. 
loc | id | oid | sku | from_loc | to_loc | tag | qty | processed | create_date | processed date 

|ECA001| 1 | 0001 |0003 | MCA022 | | T100001| 2 | Null | 2017-04-06 | NULL 

|ECA001| 7 | 0023 |0015 | MCA049 | | T100051| 12 | Null | 2017-04-06 | NULL 

而不是仅仅过滤掉那些已经使用过的人。

帮助的帮助将是巨大的谢谢,

+0

你正在做'CROSS JOIN'。所以你会得到[笛卡尔产品](https://en.wikipedia.org/wiki/Cartesian_product)。 – BJones

+0

SQL服务器或Informix,不是一回事... –

+0

我建立它在SQL服务器上,但公开查询是informix –

回答

1

这是一个什么样的查询做一个例子。

SELECT * 
FROM (SELECT 1 a 
     UNION ALL 
     SELECT 2) a, 
(SELECT 3 b 
    UNION ALL 
SELECT 4) b 

尝试添加WHERE Something in table a = something in table b

或者ON a.Column = b.Column

如果您有SQL-Server 2008的+可能像下面这样将满足您的需求。

SELECT * FROM 
(SELECT ROW_NUMBER() OVER(ORDER BY loc) AS RowNum, loc 
FROM OPENQUERY(wms7,'SELECT lc_f.loc FROM lc_f LEFT JOIN iv_f ON 
lc_f.loc = iv_f.loc WHERE lc_f.loc LIKE ''EC%'' AND lc_f.loc NOT IN (SELECT 
loc FROM iv_f WHERE loc LIKE ''EC%'' OR loc = ''ECRETURNS'')')) AS a 
JOIN (SELECT ROW_NUMBER() OVER(ORDER BY Id) AS RowNum, * 
    FROM [db1].[dbo].[ECOM_Transfer_Inventory_Job_List]) AS b ON a.RowNum = b.RowNum 
WHERE b.to_loc = '' 
    AND a.loc NOT IN (SELECT to_loc 
        FROM [db1].[dbo].[ECOM_Transfer_Inventory_Job_List] 
        WHERE to_loc != '') 
+0

谢谢,但我应该如何加入他们,如果他们没有任何共同的列匹配? –

+0

@CharlesCooper,您可能需要根据业务需求做出决定,但上面的编辑可能会有所帮助。 – BJones

+0

你是男人!谢谢你教我关于笛卡尔产品。 –