如何正确进行INNER JOIN? MySQL的

时间:2014-06-20 09:07:49

标签: php mysql sql

我有两张桌子:

table1:

businessId | businessName |的categoryId

   1              name1        355
   2              name2        451
   .                .           .    
   .                .           .         

table2:

categoryId | bussinessId

56            2
99            2 
100           8
 .            .    
 .            .  

所以业务可能属于几个类别(一对多关系)。

我想通过categoryId获取商家名称。 我正在使用此查询:

SELECT table1.businessName FROM table1 INNER JOIN table2
WHERE
table2.businessId = table1.businessId AND table2.categoryId = $_GET['categoryId'];

此查询只是根据tabel2获取属于特定categoryId的业务,但忽略table1处的关系。

我如何改进查询以检查categoryId与table1上的业务之间的关系?

我知道table1上的categoryId col应该移植到table2,但现在我不能这样做了?

实际上我也尝试了这个查询:

SELECT table1.businessName FROM table1 INNER JOIN table2
WHERE
(table2.businessId = table1.businessId AND tabl2.categoryId = $_GET['categoryId'])
OR table1.businessId = $_GET['categoryId' ;

但这不好用!它带来了许多行!

3 个答案:

答案 0 :(得分:2)

on子句中的连接条件通常比较简洁。如果您有多个加入条件(业务和类别ID),则可以使用and同时拥有它们:

SELECT     table1.businessName 
FROM       table1 t1
INNER JOIN table2 AS t2 ON t2.businessId = t1.businessId AND 
                           t2.categoryId = t1.categoryId
WHERE      t2.categoryId = $_GET['categoryId'];

答案 1 :(得分:1)

请尝试以下操作,首先使用公用密钥加入表格,然后使用where

过滤掉数据
SELECT 
table1.businessName FROM table1 
INNER JOIN table2 on table2.businessId = table1.businessId
where 
table2.categoryId = $_GET['categoryId'] ;

答案 2 :(得分:0)

(未经测试)此查询还会向您显示categoryIdbusinessIdtable1的关系数据。 我选择UNION是因为我认为在table1中可能会在类别和业务之间建立链接 并未包含在table2

select businessName
from table1
where categoryId = $_GET['categoryId']
UNION ALL
select t1.businessName
from table1 as t1
inner join table2 as t2 on t2.categoryId = t1.categoryId AND
               t2.businessId = t1.businessId
where t2.categoryId = $_GET['categoryId']