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')
我认为我可以通过内部联接实现这一点,但我想知道是否有办法更好地完成这一点,就像我上面的徒劳尝试一样。
答案 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