Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何选择其中两列中的左字符等于第二个表中两列的所有情况,这些列等于第二个表中另一列的某个值_Mysql - Fatal编程技术网

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提供的解决方案做到了这一点,它允许我们按原样导入提要并将其忘记。无论如何,我对你可能有的任何更详细的想法感兴趣。