SQL选择存在部分

SQL选择存在部分

问题描述:

PROJECTNUMBERS不同长度的名单(表),例如:SQL选择存在部分

123 
1254 
25-135 

然后我有一个DRAWINGNUMBERS(长)名单(表)具有有效和无效的值。

有效的是那些具有Projectnumber(见上文)开始,

valid: 
123-78787 
123-78799 
25-135.115-15 
25-135-511 


invalid 
1841 
Anything else 

我尝试使用

select * from DRAWINGNUMBERS where exit ??? PROJECTNUMBER 

这并不成功,因为存在或IN ......总是exect到找到价值。
但是我不能使用LEFT(..),因为PROJECTNUMBERS的长度不同。

要求:
任何想法,如何选择有效的drawingnumbers?

+0

你从哪里得到'EXIT'? – Siyual

+1

您可以标记您使用的DBMS如SQLServer/mysql/oracle ... – TheGameiswar

+0

MS SQL Server 2014 – Volker

典型的方法使用existjoin。这里是一种方法:

select d.*, 
     (case when exists (select 1 
          from projects p 
          where d.drawingnumber like concat(p.projectnumber, '%') 
         ) 
      then 1 else 0 
     end) as validFlag 
from drawings d; 

我更喜欢exists,因为两个项目可能匹配相同的图纸。 。 。说“12”和“123”。 join会产生多行。

我应该注意到并非所有的数据库都支持concat()函数。 。 。您可以使用+||&,具体取决于您的数据库。