簡體   English   中英

MySQL在一個查詢中將2個表連接在一起

[英]MySQL joining 2 tables together in one query

我有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是公司編號

因此,我真的很想將兩個查詢包裝在一起,以便它在第一個查詢中找到所有業務,然后將其進一步縮小,因此它也只顯示bus_parent_parent中的業務。

希望我已經清楚我要做什么。

是我追隨的JOIN還是其他?

在下面的SQL中嘗試使用JOIN:

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)

如果我正確理解了您,我認為您需要這樣的東西:

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_type.bus_parent_child = business.id

type.bus_parent_parent上帶有附加的WHERE子句

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

在這里,我假設bussiness_id是業務表的主鍵列。

您應該避免在大型查詢上使用distinct,因為在大型表上這樣做可能會很費力(緩慢)。 特別是如果您請求許多列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM