回答

收藏

搜索多个表(SQL)

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

我需要能够使用一个简单的搜索来搜索数据库的SQL查询。这是我的表格现在的样子:3 ?$ }3 o* e7 f1 X/ v  c
Table artists
+ w( F& l: f  G5 I' h# v* g--------------+ ^& M, q5 @. Y& ~2 ?
id& r- {( E0 d/ \
name5 l9 o: M7 N3 f, e8 W9 l
Table albums
0 D: C  f. H% I: ]3 M1 \-------------
8 C. q  `  T5 w. ]$ did. h1 L! m3 Q. ]/ f& W8 C+ m% f
artistID6 r; r) x* T9 R2 Z) I9 a
name' Z* `& a! a$ q$ u
Table songs
& h/ K  h# S% N. M' }/ |- x$ {------------
  z, f3 K' y7 {6 sid) X: ]- W6 q. I5 R4 m) u, t
albumID
2 i$ A! e8 w% ]9 U1 \1 fname; t7 L+ T; |2 O9 V" _: d# k
我将如何去做呢?这是我尝试过的一些SQL查询,但是我的问题是它返回了大量数据。例如,如果我搜索像Snoop+ z# `/ s1 ~& \6 Y2 j
Dogg这样的艺术家,即使没有专辑名称,它也会为他所拥有的每张专辑和每首歌曲返回一行。% G  z0 a4 y8 C4 r( Q) |
SELECT * FROM artist,album,songs WHERE artist.name LIKE '%snoop%' OR albums.name LIKE '%snoop%' OR songs.name LIKE '%snoop%';
& J7 ]2 \7 `# Z* l6 |编辑:' E" s9 W  c9 O3 k2 d* K
这是一个示例数据库;
$ `. _) [2 x9 ?- A$ wartists; r& Q) b( j8 f0 E
-----------
7 j* P; N  B. g/ e" C3 M2 a4 P1 | Snoop Dogg
8 D( \0 @; ]. Y- ~# E+ B5 K2 | Linkin Park
9 V5 W( j6 d- X, M2 h3 \1 x# G, _albums
: R7 K* a2 u# L; d; @: [--------
& @5 w( H- V  P1 S! @. f3 R- C1 | artist=1 | Boom6 |* c' u5 i, W! X; N% A
2 | artist=2 | ThisIsIt
; t3 j5 A( O7 u& T; W7 psongs
$ o5 m7 y* ]5 Z* b' k--------; ~# ]0 T5 y4 X6 R* e& {, O7 n8 {
1 | album=1 | First7 l/ i0 R! u: `4 }
2 | album=2 | Second Linkin( L& H" Z: r% u( n% V
3 | album=2 | Third: I4 o% Z6 ~4 z  ]2 v# ]  D
4 | album=1 | Fourth
% |1 F5 d/ ^1 @因此,我想搜索“ snoop”以仅返回艺术家“ Snoop Dogg”。但随后进行了类似“ Linkin”的搜索,以返回歌手和歌曲。
5 j) H4 Z/ C* O* r+ L. J. y                1 Z* l  s5 H- B) X2 j/ O; k
解决方案:
) \! q; x8 w: x& I0 H                8 }3 L) p3 H* j# M5 `8 \5 z4 ~" v
9 H) M* ?. P) t9 U

' v8 r$ R& q3 A% u                该查询将检索匹配的艺术家,歌曲和专辑。第一列提供有关数据来源的线索,第二列是ID,最后一列是名称。
# R! u# I# S6 K9 h& `2 iselect 'Artists' OriginatingTable, id, name: b8 y9 j9 F* n1 B- Q
  from artists
1 F. z' s5 ~# @ where name like '%snoop%'+ G) Q, j; }& x6 w) X
union all6 j# s! ]5 G0 Y
select 'Albums', id, name9 I8 @1 A; ?- R8 f5 {
  from albums
0 @5 l$ x; _: }& d  Z' d where name like '%snoop%'
7 l/ L! [$ l* lunion all$ d' D8 A$ N/ P4 N5 N$ e
select 'Songs', id, name
  i" A4 p+ L% ^- f6 s$ J- @0 q2 ?  from songs8 j' Q( K! e) H& Y2 Q( ?
where name like '%snoop%'
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则