如果条件满足则连接表

时间:2014-10-16 02:06:03

标签: python mysql

我有两张桌子' A'当&a1/a2v1相同时,我需要加入两个表,然后它应该采用相应的数据,如下所述。

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()

请帮我纠正我的代码!

2 个答案:

答案 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)