如何选择2列中的左字符数等于第2表中2列的所有情况,其等于第2表中另一列的某个值

时间:2017-11-15 18:19:47

标签: mysql

key_table

key1    key2    ansr      
36  7600    IU-3  
36  9500    OPD  
01  0100    T3 R  
01  0104    T3 L  
01  3900    T4 R  
03  0202    T3 R  

base_table

base1   base2  
367123  7600jjkl  
01juty  0202qqrr  
018723  3900juyt  
03ppot  0202qrt  
3674t5  9500qqpp  
01y756  0100hutt  

我希望能够从base_table返回所有行,其中base1的前2个字符和base2的前4个字符在一行中并且在key_table中有一些答案。

因此,在key_table中将OPD与ansr匹配的搜索将仅返回base_table行:

base1   base2  
3674t5  9500qqpp

虽然在key_table中将T3 R匹配为ansr的搜索将返回base_table行:

base1   base2  
01y756  0100hutt  
03ppot  0202qrt

我尝试了以下内容,在我提交时做了个鬼脸,没有成功:

SELECT * 
  FROM `base_table`
 WHERE left(`base1`,2) = key1 
   and left(`base2`,4) = key2 in (SELECT `key1`,`key2` FROM `key_table` WHERE `ansr` = 'R-1')

我认为我可以通过内部联接实现这一点,但我想知道是否有办法更好地完成这一点,就像我上面的徒劳尝试一样。

1 个答案:

答案 0 :(得分:1)

试试这个:

SELECT * FROM base_table WHERE
CONCAT(left(base1,2), left(base2,4))
in (SELECT CONCAT(key1, key2) FROM key_table WHERE ansr = 'OPD') 

输出是:

3674t5 9500qqpp