我有两张桌子' A'当&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()
请帮我纠正我的代码!
答案 0 :(得分:1)
我猜..如果您希望得到结果,如果表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
也许,您也可以尝试使用简单的JOIN而不是INNER JOIN作为
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
答案 1 :(得分:1)
看起来只需要进行一些更改。看起来您需要一个与 v1
匹配的谓词 a1
或的 a2
即可。这可以通过这样的谓词来完成(例如):
WHERE B.v1 IN (A.a1,A.a2)
另一个更改是返回 A.a3
而不是 A.a2
,这只是更改为列中的列引用选择清单。
实际上,它看起来有点复杂。从示例输出中,您似乎想要返回 A.a1
而不是 B.v1
。
(我个人的偏好是将谓词从WHERE
子句移动到JOIN的ON
子句。我还希望省略INNER
关键字。但是这两个变化实际上并没有影响查询。)
SELECT B.NO
, A.a1 AS V1
, A.a3 AS V2
FROM A
JOIN B
ON B.v1 IN (A.a1,A.a2)