2013-02-04 45 views
-2

我有5代表這樣選擇:SQL查詢從多個表中

  • 表1: PRIMARY_KEY,NAME,FK_TABLE2
  • 表2: PRIMARY_KEY,FK_TABLE3
  • 表3: PRIMARY_KEY,FK_TABLE4
  • 表4: PRIMARY_KEY,FK_TABLE5
  • 表5: PRIMARY_KEY,DIAGRAM_NAME

而且我想要的是,當我在搜索欄中輸入一個名稱,它返回NameTable1,也DIAGRAM_NAMEtable 5。 第一部分是簡單的:

SELECT `TABLE1`.name 
from Table 1 
Where `TABLE1`.name LIKE '%$search%' 

但對於第二部分我需要你的幫助...... 謝謝!

回答

0

你需要考慮使用JOIN

SELECT T.Name, T5.Diagram_Name 
FROM Table1 T 
    JOIN Table2 T2 ON T.FK_TABLE2 = T2.PRIMARY_KEY 
    JOIN Table3 T3 ON T2.FK_TABLE3 = T3.PRIMARY_KEY 
    JOIN Table4 T4 ON T3.FK_TABLE4 = T4.PRIMARY_KEY 
    JOIN Table5 T5 ON T4.FK_TABLE5 = T5.PRIMARY_KEY 
WHERE T.Name LIKE '%$search%' 

如果你想返回沒有匹配的圖名的名稱,使用LEFT JOIN代替。

祝你好運。

+0

你可能是指'T5.Diagram_Name' – paul

+0

好趕上@paul - 我編輯了我的答案! – sgeddes

0

您打算使用Primary KeyFK值需要JOIN表:

select t1.name, t5.DIAGRAM_NAME 
from table1 t1 
left join table2 t2 
    on t1.FK_TABLE2 = t2.PRIMARY_KEY 
left join table3 t3 
    on t2.FK_TABLE2 = t3.PRIMARY_KEY 
left join table4 t4 
    on t3.FK_TABLE3 = t4.PRIMARY_KEY 
left join table5 t5 
    on t4.FK_TABLE4 = t5.PRIMARY_KEY  
Where t1.name LIKE '%$search%'  

如果您需要幫助學習JOIN語法,這裏是一個偉大的visual explanation of joins

我在我的示例查詢中使用了一個LEFT JOIN,即使其餘表中沒有匹配的行,它也會從table1返回所有行。

如果您知道您要加入的所有表格中存在匹配的行,則可以使用INNER JOIN