回答

收藏

MySQL-选择与所有标签匹配的ID

技术问答 技术问答 241 人阅读 | 0 人回复 | 2023-09-14

我有一个交叉引用表:
+ M3 \/ ^9 ]0 \# mID | tag7 h$ x, T$ y6 x
1  | 4
2 R' ^9 U! R; j9 x" s0 W8 y1  | 5
; L% |$ i9 Z+ j  x# Y6 W1 D1  | 6
+ _; R  d$ C5 B8 d# ?, n5 s4 w2  | 49 U; `1 |* ^- v- Z- s. o% _5 i. Z! t' k" R
2  | 5' ]$ T* V- p' S
2  | 85 X" F  I& R7 j5 J- c! X0 _
3  | 2; ]# o7 s$ f* E7 {! A. p( n6 |% N
我需要选择与 所有 标签集匹配的ID 。例如,如果给'4','5'我标签,我将获得ID, f! P! A1 _: m' x5 s6 ?4 e
'1','2'。如果给我标签,'4','2'我将不会获得任何ID,因为没有与 所有 标签匹配的ID 。+ A1 N; s$ e: @( f; r
另外,如果为我提供了标签,'4','9'那么我也不应该获得任何结果ID,因为搜索'9'将得到一个NULL值,因此没有ID与 所有 标签匹配。# x/ y1 r. X- F0 I. e% x/ O* n
最近两天我一直在拔头发。希望有人可以帮助我。
6 g! a1 ^( ~; U3 Z1 y               
  H; |  U" i" [" c+ m解决方案:# g. Q6 ~6 |+ _5 N  U+ B
               
0 k: Z- y; }1 i* J- n' r" k% u! C9 a. Q7 W

4 S4 _3 v$ i5 h, R- j5 M4 C                查询的想法是,您需要将记录数与WHERE子句中提供的值数进行匹配。
2 V: y* R+ f) z5 [/ wSELECT ID# J* `: ]; I6 L/ p6 g8 Z
FROM tableName
3 e1 M5 f4 g4 }1 m* h2 [3 @+ pWHERE tag IN (4, 8)$ o9 J* k3 N& x% z
GROUP BY ID: n8 o" ^7 o& S, \/ C
HAVING COUNT(*) = 2- W. ?5 X  n$ X' Y& f
SQLFiddle演示5 [/ y3 g. ]9 R# I( t" }

4 r- k! r+ J6 L2 O& ^5 p* o) X如果未在标签上为每个ID指定唯一约束,则DISTINCT需要
) q) g, F4 d; c0 q7 E1 K) ySELECT ID
2 a# X5 A# Y9 k* h. ?FROM tableName, t! d# ?3 K+ G& j& g
WHERE tag IN (4, 8)
+ t+ w9 E" A3 @, A# T% [( G% _GROUP BY ID$ s3 P/ k) I# Q* V1 r0 q6 ]* s
HAVING COUNT(DISTINCT tag) = 2
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则