SQL Query从许多表中选择

时间:2013-02-04 14:34:46

标签: mysql sql database

我有5张这样的表:

  • 表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

我想要的是当我在搜索栏中搜索名称时,它会从Name返回Table1,并从DIAGRAM_NAME返回table 5。 第一部分很简单:

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

但是对于第二部分我需要你的帮助...... 谢谢!

2 个答案:

答案 0 :(得分: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

祝你好运。

答案 1 :(得分:0)

您需要使用JOINPrimary Key值来FK表:

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