Python 如果条件满足,则连接表
我有两个表“A”和“B”。当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获得相应的数据
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)