可以说我有 4 张桌子 ' A(id, type, protocol), B(id, A_id, info), C(id, B_id, details) and D(id, C_id, port_info)
。TableA
和 TableB
通过id
TableA
和A_id
Table的外键连接B
。同理,TableB
和 TableC
通过外键id
from TableB
和B_id
from Table连接C
,同理,TableC
和 TableD
也是连接的。
现在,我想port_info
从 TableD
中获取所有protocols
from Table A
。我知道一种时间复杂度为 的方法O(n^4)
,我目前正在使用该方法。方法如下:
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="mydb")
cur = db.cursor()
cur.execute("SELECT * FROM A")
A_results = cur.fetchall()
for A_row in A_results :
id = A_row[0]
cur.execute("SELECT * FROM B WHERE A_id = %d " % (id ))
B_results = cur.fetchall()
for B_row in B_results :
id = B_row[0]
cur.execute("SELECT * FROM C WHERE B_id = %d " % (id ))
c_results = cur.fetchall()
for C_row in C_results :
id = C_row[0]
cur.execute("SELECT * FROM D WHERE C_id = %d " % (id ))
D_results = cur.fetchall()
for D_row in D_results :
print "Port = " + str(port)
但是这种方法需要O(n^4)
,所以在 方面有什么有效的方法time complexity
,可以解决这个问题。
非常感谢您的建议。