Mysql 如何选择其中两列中的左字符等于第二个表中两列的所有情况,这些列等于第二个表中另一列的某个值
键表Mysql 如何选择其中两列中的左字符等于第二个表中两列的所有情况,这些列等于第二个表中另一列的某个值,mysql,Mysql,键表 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 基表 base1 base2 367123 7600jjkl 01juty 0202qqrr 018723 3900juyt 03ppot 0202qrt 3674t5 9500
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
基表
base1 base2
367123 7600jjkl
01juty 0202qqrr
018723 3900juyt
03ppot 0202qrt
3674t5 9500qqpp
01y756 0100hutt
我希望能够返回base_表中的所有行,其中base1的前2个字符和base2的前4个字符相等,并且在key_表中有一些答案
因此,在key_表中将OPD匹配为ansr的搜索将只返回base_表行:
base1 base2
3674t5 9500qqpp
而将T3R作为ansr匹配到key_表中的搜索将返回基本_表行:
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')
我想我可以通过内部连接来实现这一点,但我想知道是否有一种方法可以像我上面徒劳的尝试那样实现这一点。试试这个:
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
明亮的非常感谢。做鬼脸很好。但是像这样的问题通常源于糟糕的设计在这种情况下,两个表都是直接导入的数据源,因此我们感觉在某种程度上被结构卡住了,至少在导入时是这样。我想我们可以创建一个或多个新表,这样可能会更有效率,但@java_guy提供的解决方案做到了这一点,它允许我们按原样导入提要并将其忘记。无论如何,我对你可能有的任何更详细的想法感兴趣。