2014-12-05 69 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