2017-01-05 40 views
0

SQL查詢初學者,顯然。SQLite從三個表中選擇變量匹配

所以我有3個數據表:帳戶,所有者,車輛。 「USER_NAME」:

這三個與公共變量綁在一起。

我想從三個表格其中用戶名我的搜索匹配變量的所有項目。因此,如果我使用User_Name搜索用戶:「Mike」,將顯示User_Name爲「Mike」的三個表中的所有項目。

我一直在使用一般的「加入」下面的查詢,但我怎樣才能改變這種使用搜索變量來選擇相匹配的所有表變量呢?

cursor.execute("SELECT * FROM Account JOIN Owner ON(Account.User_Name = Owner.User_Name) JOIN Vehicle ON(Account.User_Name = Vehicle.User_Name)") 

我已經看過其他各種堆棧線程關於「從多個表中選擇」但他們都只是從2個表和3選擇那些選擇,沒有我想要的變量匹配。

因此,在短期:

搜索三個表,並得到其中一個共同的列變量的搜索字符串匹配的所有行。

+0

的可能的複製[如何從多個表的SQL查詢返回的數據(http://stackoverflow.com/questions/12475850/how-can-an-sql-query-return-data-from-multiple-tables ) – MooingRawr

+0

也許這個問題的答案將幫助:http://stackoverflow.com/questions/35470590/sql-select-of-data-from-three-tables-relationed?rq=1 – igneosaur

+0

添加'WHERE Account.User_Name = %s',並替換搜索名稱。 – Barmar

回答

0

由於您的標籤指示的Python,我將展示使用Python的答案,假設search_user變量保存我們要搜索用戶名:

cursor.execute("SELECT * FROM Account JOIN Owner ON(Account.User_Name = Owner.User_Name) JOIN Vehicle ON(Account.User_Name = Vehicle.User_Name) WHERE Account.User_Name='%s'" % search_user) 

事情是比較明顯的,如果我們只是提取SQL和在一個更可讀的格式格式化:

SELECT * 
    FROM Account 
    JOIN Owner ON (Account.User_Name = Owner.User_Name) 
    JOIN Vehicle ON (Account.User_Name = Vehicle.User_Name) 
WHERE Account.User_Name='%s' 

上面的查詢將包含搜索User_NameAccount篩選所有記錄。連接將匹配具有匹配連接條件的其他表中的記錄。

請注意,如果您沒有User_Name匹配任何表中的搜索值,則結果中不會顯示任何記錄。例如,有一個在表AccountUser_Name = 'Joe'的記錄,但在表Vehicle'Owner'沒有記錄'Joe'。結果將不會有'Joe'的記錄。

+0

啊,所以我只需要在最後添加一個「WHERE」子句。在問這個問題之前,我嘗試了這個解決方案,但我想我必須得到一個不正確的語法。這解決了我的問題。謝謝! – DannyBoy