2017-04-11 1 views
2

So habe ich zwei Tabellen, diein Klausel nicht nicht SQL Server Filterung mit offenen Abfrage


Inventar Tabelle wie folgt aussehen (dies ist nur eine Liste von Leerplätze ziehen)

|loc| 

|ECA001| 
_____ 

Inventar Transfer Jobliste Tabelle

|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 

___ 

Was ich tun möchte, ist die Inventory_Transfer_Job_List_Table bevölkern. To_loc mit dem nächsten leeren Ort auf meiner ersten Tabelle & Ort nicht bereits in meiner Inventory_Transfer_Job_List.to_loc Tabelle verwendet

Ich arbeite gerade eine Select-Anweisung jetzt, um sicherzustellen, bevor ich aktualisieren, dass ich die richtigen Daten einfüge.

Ich versuchte

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 != '') 

aber ich bin nur einen wiederholten Wert

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 

statt es nur die, die Filterung immer aus, die bereits verwendet wurden.

Hilfe Hilfe wäre toll, danke,

+0

Sie machen ein 'CROSS JOIN'. Du wirst also das [kartesische Produkt] (https://en.wikipedia.org/wiki/Cartesian_product) bekommen. – BJones

+0

SQL-Server oder Informix, nicht die gleiche Sache ... –

+0

Ich baue es auf SQL-Server, aber die Openquery ist Informix –

Antwort

1

Hier ist ein Beispiel dafür, was Ihre Abfrage tut.

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

Versuchen Sie, WHERE Something in table a = something in table b hinzuzufügen.

Oder ON a.Column = b.Column

Wenn Sie SQL-Server 2008 haben + vielleicht so etwas wie das Folgende wird Ihre Bedürfnisse.

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

Vielen Dank, aber wie sollte ich ihnen beitreten, wenn sie keine gemeinsamen Spalten haben? –

+0

@CharlesCooper, Sie müssen möglicherweise eine Entscheidung aufgrund der Geschäftsanforderungen treffen, aber vielleicht hilft das oben Beschriebene. – BJones

+0

Du bist der Mann! Danke, dass Sie mir etwas über das kartesische Produkt beigebracht haben. –