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?
答
典型的方法使用exist
或join
。这里是一种方法:
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()
函数。 。 。您可以使用+
或||
或&
,具体取决于您的数据库。
你从哪里得到'EXIT'? – Siyual
您可以标记您使用的DBMS如SQLServer/mysql/oracle ... – TheGameiswar
MS SQL Server 2014 – Volker