我应该在这里使用什么样的JOIN?

时间:2010-02-22 15:00:14

标签: php sql mysql html database

我是MySql中JOINS的新手。

我有六个表:t1,t2,t3,t4,t5,t6。 我还有一个主表:main_table。 总计7个表格!

所有表的第一列称为classified_id

如果用户搜索“cars”,那么主表将匹配表t1中的所有内容(即cars表),其中classified_id在两个表中都相同。

所以:

   SELECT * FROM main_table, t1 WHERE main_table.classified_id=t1.classified_id

这很好用,虽然我不确定这是加入这里的方法。在我的情况下,性能是一个问题!

然而,这是我的问题。 每当搜索到所有CLASSIFIEDS 时,我需要将main_table.classified_id与其他表classified_id列匹配,并获得每个分类。

该查询应如何组成?

    SELECT * FROM main_table, t1, t2, t3, t4, t5, t6 // I have this so far which is not much!

如果您需要更多输入,请询问,我将更新此问号。

由于

编辑: 表格设置:

     main_table:              t1:
     ID(PK)                   ID (PK)
     classified_id -> 25      classified_id     ->   25
     category  -> CARS        year     ->    1997

2 个答案:

答案 0 :(得分:4)

如果所有表中都存在该行(即每个表都有特定classified_id的行),那么您将使用内部联接:

SELECT 
   m.classified_id
   ,m.category
   ,t1.year
   ,........
FROM 
   main_table m
   INNER JOIN t1 ON m.classified_id = t1.classified_id
   INNER JOIN t2 ON m.classified_id = t2.classified_id
   INNER JOIN t3 ON m.classified_id = t3.classified_id
   INNER JOIN t4 ON m.classified_id = t4.classified_id
   INNER JOIN t5 ON m.classified_id = t5.classified_id
   INNER JOIN t6 ON m.classified_id = t6.classified_id

如果每个表中都不存在该行,那么您将使用LEFT JOINS以便不删除行

答案 1 :(得分:2)

使用:

   SELECT mt.*,
          t1.*,
          t2.*,
          t3.*,
          t4.*,
          t5.*,
          t6.*
     FROM MAIN_TABLE mt
LEFT JOIN TABLE_1 t1 ON t1.classified_id = mt.classified_id
LEFT JOIN TABLE_2 t2 ON t2.classified_id = mt.classified_id
LEFT JOIN TABLE_3 t3 ON t3.classified_id = mt.classified_id
LEFT JOIN TABLE_4 t4 ON t4.classified_id = mt.classified_id
LEFT JOIN TABLE_5 t5 ON t5.classified_id = mt.classified_id
LEFT JOIN TABLE_6 t6 ON t6.classified_id = mt.classified_id

我使用LEFT JOIN s因为如果使用了JOIN - 将删除在至少一个t1 / 2/3/4/5/6表中没有支持记录的记录。您可能会找到this link helpful for understanding JOINs