簡體   English   中英

SQL查詢窮盡基於單一關系的多對多關系?

[英]SQL query exhausting many-to-many relationship based on single relationship?

我有一個數據庫,其中包含兩個表“ businesss”和“ citys”,以及第三個名為“ associations”的多對多關系表,除了其rowid之外,僅具有兩個字段:“ business_id”和“ city_id”。 一個企業可以覆蓋多個城市,一個城市可以被多個企業覆蓋。

現在,我想列出每個業務以及與之關聯的城市。 所以我這樣做:

SELECT
  businesses.rowid,
  businesses.name,
  GROUP_CONCAT(cities.name, ', ') as citylist
FROM businesses
JOIN associations ON businesses.rowid = associations.business_id
JOIN cities ON cities.rowid = associations.city_id
GROUP BY businesses.rowid

這完美地工作。 但是我想在實踐中要做的是,僅以完全相同的方式列出與給定城市相關的企業。 但是我還沒有找到一種方法,該方法不會使GROUP_CONCAT(cities.name, ', ')只返回給定的城市,而不返回與業務相關的所有城市。

作為一個隨機的例子,如果給定城市“ New York”,我想要這樣的結果:

0: [rowid] = 42
   [name] = Generic Business
   [citylist] = New York, Jamestown, Albany
1: [rowid] = 31
   [name] = Arbitrary Ltd.
   [citylist] = Fulton, New York, Lockport

如果對解決方案很重要,那么我目前正在使用SQLite 3,但我並不完全反對在必要時進行更改。

使用having子句;

SELECT b.rowid, b.name,
       GROUP_CONCAT(c.name, ', ') as citylist
FROM businesses b JOIN
     associations a
     ON b.rowid = a.business_id JOIN
     cities c
     ON c.rowid = a.city_id
GROUP BY b.rowid, b.name
HAVING SUM(CASE WHEN c.name = 'New York' THEN 1 ELSE 0 END) > 0;

筆記:

  • 表別名( abc )使查詢更易於編寫和閱讀。
  • 為了清楚起見,我更喜歡將所有未聚合的列放在GROUP BYSELECT中。

暫無
暫無

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

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