可以說我有4桌'A(id, type, protocol), B(id, A_id, info), C(id, B_id, details) and D(id, C_id, port_info)
。表A
和表B
通過來自表A
的外鍵id
和來自表B
的A_id
連接。類似地,表B
和表C
經由外鍵id
從表B
和B_id
從表C
連接,並且以相同的方式,表C
和表D
也被連接。如何使嵌套查詢更高效?
現在,我想從表A
的所有protocols
的表D
得到port_info
。 我知道一種方法,其時間複雜度爲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
方面的任何有效的方法,可以解決這個問題。
您的建議非常感謝。
MySQL(或甚至任何SQL)101.請參閱JOIN。 – Strawberry