我有两张桌子:
1 name1 355
2 name2 451
. . .
. . .
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' ;
但这不好用!它带来了许多行!
答案 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)
(未经测试)此查询还会向您显示categoryId
与businessId
中table1
的关系数据。
我选择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']