Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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
Python 如果条件满足,则连接表_Python_Mysql - Fatal编程技术网

Python 如果条件满足,则连接表

Python 如果条件满足,则连接表,python,mysql,Python,Mysql,我有两个表“A”和“B”。当a1/a2和v1相同时,我需要将两个表连接起来,然后它应该采用下面解释的相应数据 A id a1 a2 a3 1 hi hello we 2 see when tree 3 bee animal fly B no. v1 v2 1 bee null 2 when null 预期输出:在这里,当它发现A中的任何数据a1/a2与B中的v1相同时,当两者相似时,它应该从a1/a2到v2获得相应的数据

我有两个表“A”和“B”。当
a1/a2
v1
相同时,我需要将两个表连接起来,然后它应该采用下面解释的相应数据

A

id a1   a2     a3   
1  hi   hello  we
2  see  when   tree
3  bee  animal fly

B
no. v1   v2       
1   bee  null
2   when  null
预期输出:在这里,当它发现A中的任何数据
a1/a2
与B中的v1相同时,当两者相似时,它应该从
a1/a2
到v2获得相应的数据

B
no. v1   v2       
1   bee  fly
2   see  tree
我有一个代码,它只能检查一个字段的相似性,而不能检查两个字段并获得结果

我的代码:

import MySQLdb
import os
db = MySQLdb.connect(host="localhost", # your host, usually localhost
                         user="root", # your username
                          passwd="mysql", # your password
                          db="sakila") # name of the data base
cursor = db.cursor()
cursor.execute(" SELECT B.NO, B.v1 AS V1, A.a2 AS V2
 FROM A INNER JOIN B
 WHERE A.a1 = B.v1")
db.commit()

请帮我修改代码

我想。。如果表A中的列a1或a2与列v1中的列相匹配,则要获得结果,只需将查询更改为以下内容:

SELECT B.NO, B.v1 AS V1, A.a2 AS V2 FROM A INNER JOIN B WHERE A.a1 = B.v1 OR A.a2 = B.v1
也许,您也可以尝试使用简单连接,而不是内部连接

SELECT B.NO, B.v1 AS V1, A.a2 AS V2 FROM A JOIN B WHERE A.a1 = B.v1 OR A.a2 = B.v1

看起来只需要几处改动。看起来您需要一个将
v1
a1
a2
匹配的谓词。这可以通过如下谓词实现(作为示例):

另一个更改是返回
A.a3
,而不是
A.a2
,这只是更改为选择列表中的列引用

事实上,它看起来比那复杂一点。从示例输出中,您似乎希望返回
A.a1
,而不是
B.v1


(我个人倾向于将谓词从JOIN的
WHERE
子句移动到
ON
子句。我还倾向于省略
internal
关键字。但这两个更改实际上不会影响查询。)


注意:删除
internal
关键字在MySQL中没有区别。在MySQL中,
JOIN
internaljoin
CROSS-JOIN
都是同义词。
 WHERE B.v1 IN (A.a1,A.a2)
  SELECT B.NO
       , A.a1 AS V1
       , A.a3 AS V2
    FROM A
    JOIN B
      ON B.v1 IN (A.a1,A.a2)