0

我有 2 个要加入的查询,但我以前从未真正做过。希望你们中的一个明亮的火花可以提供帮助。

它正在显示待售企业。第一个查询很好。

SELECT DISTINCT * FROM businesses WHERE business_asking_price > 1 AND business_location = 11 ORDER BY business_id DESC

以上搜索特定价格内的所有企业,以及查找伦敦的所有企业。

到现在为止还挺好。

但令我头疼的是业务类型。一个企业(比方说美发师)可以有多种业务类型类别。在这种情况下,它是健康/美容和美发沙龙。

因此,这些类别位于名为 bus_parents 的不同表中:

bus_parent_id  |   bus_parent_parent | bus_parent_child

176            |          56         |         42
177            |          56         |         43
181            |          56         |         46
202            |          56         |         57

bus_parent_id 显然是唯一的 id

bus_parent_parent 是业务类型 ID

bus_parent_child 是企业 ID

所以我真的想把这两个查询包装在一起,这样它就可以找到第一个查询的所有业务,然后进一步缩小它们的范围,这样它也只显示 bus_parent_parent 内的业务。

希望我已经清楚地表明我正在尝试做什么。

是我追求的 JOIN 还是其他什么?

4

4 回答 4

0

使用 JOIN 尝试以下 SQL:

SELECT DISTINCT businesses.* 
FROM businesses 
INNER JOIN bus_parents ON businesses.business_id = bus_parents.bus_parent_child 
WHERE businesses.business_asking_price > 1 
AND businesses.business_location = 11 
AND bus_parents.bus_parent_parent = 56 
ORDER BY businesses.business_id DESC

它将检索所有类型id = 56的业务,您可以根据需要更改此参数。

根据您对 bus_parents 中每个字段的描述,我用来JOIN检索所需的结果。(缩小业务类型 ID)

于 2013-02-20T12:34:24.400 回答
0

如果我对您的理解正确,我认为您想要这样的东西:

SELECT DISTINCT * FROM businesses 
LEFT JOIN business_type ON business_type.bus_parent_child = business.id 
WHERE business_asking_price > 1 AND business_location = 11 
AND business_type.bus_parent_parent = <Your desired parent> 
ORDER BY business_id DESC

这是加入 business 到 business_type onbusiness_type.bus_parent_child = business.id

带有附加的 WHERE 子句type.bus_parent_parent

于 2013-02-20T12:36:03.743 回答
0
SELECT DISTINCT businesses.* 
FROM businesses a
INNER JOIN bus_parents b ON a.business_id = b.bus_parent_parent 
WHERE a.business_asking_price > 1 
AND a.business_location = 11 
ORDER BY a.business_id DESC
于 2013-02-20T12:39:20.500 回答
0
SELECT * FROM businesses b WHERE business_asking_price > 1 AND business_location = 11 

and (select bus_parent_id from bus_parents where bus_parent_child=b.bussiness_id and bus_parent_parent=in(56,57,58) limit 1) != NULL

ORDER BY business_id DESC

这里我假设 business_id 是业务表的主键列。

您应该避免在大型查询上使用 distinct,因为它在大型表上可能会非常费力(缓慢)。特别是如果您请求许多列。

于 2013-02-20T12:43:16.093 回答