条件满足时联接表

2024-05-27 12:14:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个表'A'和'B'。当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()

请帮我修改代码!你知道吗


Tags: 数据no代码treea2dbyoura1
2条回答

看起来只需要几处改动。看起来您需要一个匹配v1的谓词a1a2。这可以用这样的谓词来完成(作为一个例子):

 WHERE B.v1 IN (A.a1,A.a2)

另一个更改是返回A.a3而不是A.a2,这只是更改为SELECT列表中的列引用。你知道吗

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


(我个人倾向于将谓词从连接的WHERE子句移到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)

我想。。如果表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

相关问题 更多 >

    热门问题