2012-08-29 77 views
1

我使用Access 97如何使用通配符連接兩個表列?

這是我想做的事:

SELECT * 
FROM CodeDIS, ListOfProducts 
WHERE CodeDIS.IDNumber LIKE ListOfProducts.IDNumber*; 

有時IDNumber中上ListOfProducts有一個額外的信說明有關產品的一些信息。

所以我CodeDIS上有IDNumber AC244,但我有ListOfProducts上的AC244P。

我想要的只是在條件結尾添加通配符。

這可能嗎?

回答

1

如果選擇的是C或P,爲什麼不:

SELECT * 
FROM CodeDIS, ListOfProducts 
WHERE CodeDIS.IDNumber = ListOfProducts.IDNumber & "C" 
OR CodeDIS.IDNumber = ListOfProducts.IDNumber & "P" 
+0

這是一個簡單的出路=),但CodeDIS應該用新的字母得到新的值。 –

1

如何:

SELECT * 
FROM CodeDIS, ListOfProducts 
WHERE CodeDIS.IDNumber LIKE left(ListOfProducts.IDNumber,5); 

,或者如果你喜歡:

SELECT * 
FROM CodeDIS a inner join ListOfProducts b on a.IDNumber = left(b.IDNumber,5); 
+0

TIL:使用Access執行SQL語句時可以使用左側。這是一種更爲實用的方式,但我仍然不知道如何在Access 97中使用通配符。 –

0

我知道這是舊的,但我還沒有發佈太多,並認爲我會在這裏嘗試。

如果最後一位數字總是一個字符,爲什麼不使用子字符串函數進行PATINDEX測試?我確定我的代碼是非常低效的,但這是我的初學者嘗試。我敢打賭,有些人可以將我的病例陳述打成更小的東西。

-- I used the code below 
-- It only works if the final digit is lower or uppercase letter of 
-- specified language. 
DECLARE @CodeDIS TABLE (IdNumber nvarchar(50), BaseRowNum nvarchar(50)); 

insert into @CodeDIS (IdNumber,BaseRowNum) values ('52352345','1') 
insert into @CodeDIS (IdNumber,BaseRowNum) values ('134131','2') 
insert into @CodeDIS (IdNumber,BaseRowNum) values ('1343141','3') 
insert into @CodeDIS (IdNumber,BaseRowNum) values ('a143321','4') 
insert into @CodeDIS (IdNumber,BaseRowNum) values ('c34324','5') 
insert into @CodeDIS (IdNumber,BaseRowNum) values ('1343214','6') 
insert into @CodeDIS (IdNumber,BaseRowNum) values ('%134324','7') 
insert into @CodeDIS (IdNumber,BaseRowNum) values ('a%134324','8') 
insert into @CodeDIS (IdNumber,BaseRowNum) values ('1413','9') 
; 
DECLARE @ListOfProducts TABLE (IdNumber nvarchar(50), UpdateSourceDataColumn nvarchar(50)); 

insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('52352345a','11') 
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('134131','22') 
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('1343141a','33') 
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('a143321','44') 
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('c343245','55') 
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('1343214Z','66') 
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('%134324','77') 
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('a%134324','88') 
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('1413\','99') 
; 
SELECT a.*,b.IdNumber as IdNumber2, b.UpdateSourceDataColumn 
    FROM @CodeDIS a 
    left join @ListOfProducts b 
    on a.IdNumber = 
     case 
     when PATINDEX(
      '[a-zA-Z]', 
      substring(b.IdNumber,len(b.IdNumber),1) 
      COLLATE Latin1_General_CS_AS 
     )=1 
     then left(b.IdNumber,len(b.IdNumber)-1) 
     else b.IdNumber 
     end 
    ;  
--IdNumber BaseRowNum IdNumber2 UpdateSourceDataColumn 
--52352345 1   52352345a 11 
--134131 2   134131  22 
--1343141 3   1343141a 33 
--a143321 4   a143321  44 
--c34324 5   NULL  NULL 
--1343214 6   1343214Z 66 
--%134324 7   %134324  77 
--a%134324 8   a%134324 88 
--1413  9   NULL  NULL