2014-12-05 102 views
0

找到兩個4字和6個字符值下面是兩個表我有工作,與表中的列沿:SQL查詢從兩個表中

 
**## Table 1 ##** 

Grantee Column w/sample data 

Grantee 
---------- 
CLAT 

CLATX1 

DJSD 

DJSDX3 

ADKS 

ADKSX5 

DKHS 
 
**## Table 2 ##** 

Inact_ID Column w/sample data 

Inact_ID 
---------- 
CLAT 

DJSD 

ADKS 

DKHS 

用下面的查詢:

SELECT DISTINCT A.GRANTEE   
FROM TABLE1 A    
WHERE      
EXISTS(SELECT 1      
     FROM TABLE2 B  
     WHERE A.GRANTEE= B.INACT_ID); 
 
These are my results: 

CLAT 

DJSD 

ADKS 

DKHS 

4字ID的回來了 - 不是我想要的一切(也希望6個字符的ID與4個字符的ID相關聯)

除了獲得那些4個字符的ID之外,這些4個字符ID中的一些還具有另一個ID,其具有以下命名約定 - A02WXn,其中X是常數,並且n是從0-9的數字,其是6個字符的ID。我希望能夠包含6個字符的ID,如果它與4個字符的ID一起存在。 6個字符的ID只存在於表1中。

更新:我想我可能更接近解決方案,希望這可以澄清更多我想要的結果。

SELECT A.GRANTEE FROM TABLE1 A INNER JOIN (SELECT B.INACT_ID FROM INACTIVE_USERS B) ON A.GRANTEE LIKE '%' || B.INACT_ID || '%';

 
(Note - This was done on Postgres, and worked, but I can't get it to run in DB2) 
Results from Postgres Below:(Desired Results - Both 4 character ID and 6 Character ID if exists) 

GRANTEE 
-------- 
CLAT 

CLATX1 

DJSD 

DJSDX3 

ADKS 

ADKSX5 

DKHS 
+0

怎麼樣'... WHERE LEFT(A.GRANTEE,4)= B.INACT_ID'? – mustaccio 2014-12-05 18:08:56

+0

Artjom B. - 感謝您的編輯。 mustaccio - 我很欣賞這個迴應!當我編輯我的WHERE CLAUSE以符合您的要求時,我會得到不正確的結果。我得到的ROWS不只是4或6個字符。我只想要4個字符的ID和相關的6個字符ID(如果存在)。 謝謝 – SkiDoo1222 2014-12-05 18:40:09

+0

然後你需要提供更有意義的樣本數據,包括特例。我的建議可以與你現有的樣本完美配合。 – mustaccio 2014-12-05 20:06:21

回答

0

試試下面的SQL:

SELECT DISTINCT A.GRANTEE   
 
FROM TABLE1 A    
 
WHERE      
 
EXISTS(SELECT 1      
 
     FROM TABLE2 B  
 
     WHERE substring(A.GRANTEE,1,4)= B.INACT_ID);

我想同樣的事情在Sybase數據庫。它工作得很好!

create table #temp1 
 
(
 
GRANTEE varchar(125) 
 
) 
 
insert into #temp1 values('A02W') 
 
insert into #temp1 values('A02WX2') 
 
insert into #temp1 values('DBDS') 
 
insert into #temp1 values('DBDSX4') 
 
insert into #temp1 values('A03') 
 
insert into #temp1 values('ASKDLAKDJD') 
 

 
create table #temp2 
 
(
 
INACT_ID varchar(4) 
 
) 
 
insert into #temp2 values('A02W') 
 
insert into #temp2 values('AAAB') 
 
insert into #temp2 values('AVCD') 
 
insert into #temp2 values('SSLD') 
 

 
select * from #temp1 
 
select * from #temp2 
 

 

 
SELECT DISTINCT A.GRANTEE   
 
FROM #temp1 A    
 
WHERE      
 
EXISTS(SELECT 1      
 
     FROM #temp2 B  
 
     WHERE substring(A.GRANTEE,1,4) = B.INACT_ID);

+0

如果我使用Substr(A.GRANTEE,1,4)= B.INACT_ID子句,那麼返回的行不僅僅是我之後的4個和6個字符。 我改寫並添加了一些更新到我原來的帖子,如果這有助於澄清。 對不起,有任何混淆。我感謝你的投入! – SkiDoo1222 2014-12-05 22:26:58

+0

謝謝!如果解決了這個問題,請將其標記爲答案。 – 2014-12-05 22:33:52

+0

您提供的查詢不適用於我嘗試檢索的內容。 – SkiDoo1222 2014-12-05 22:45:00