簡體   English   中英

通過多個值過濾一對多關系

[英]Filter one-to-many relationship by multiple values

這一定是很平常的事情,但是我沒有運氣谷歌搜索。

我有一個類別表:

Table A
catid | text
1     | Category A
2     | Category B
3     | Category C

然后將此表連接到一張地圖,該地圖可跟蹤照片所在的類別

Table B
catid | photoid
1     | 1
2     | 1
1     | 2
3     | 3

我需要做的是過濾查詢,以便僅返回選擇的每個類別中的照片。 例如:

  1. 如果用戶選擇類別A和B,則返回照片1。
  2. 如果用戶僅選擇類別A,則返回照片1和2。
  3. 如果用戶選擇類別A,B和C-我什么也不會返回。

謝謝你提供的所有幫助。

-Matt

最簡單的方法之一是:

SELECT 
    * 
FROM 
    B 
WHERE 
    B.catid IN (1, 2) 
GROUP BY 
    B.photoid 
HAVING 
    COUNT(B.photoid) = 2

要匹配3個類別,您需要執行以下操作:

SELECT 
    * 
FROM 
    B 
WHERE 
    B.catid IN (1, 2, 3) 
GROUP BY 
    B.photoid 
HAVING 
    COUNT(B.photoid) = 3

您也可以多次連接同一張表。 或執行子查詢。 我將測試幾種不同的方法,以查看哪種方法對您的數據集執行最快。

使用不存在子查詢

Select distinct photoid
From photoCategory pc
Where Not Exists 
    (Select * From category c
     Where catId <> pc.catId)

答案在這里...

https://stackoverflow.com/a/17026879/520857

很抱歉剛才的誤導性回答

順便說一句,您要嘗試的操作稱為INTERSECT,MySQL本身並不支持INTERSECT,因此鏈接中的方法很奇怪。

暫無
暫無

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

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