[英]What's wrong with this SQL query?
我有兩張桌子:照片和photograph_tags。 Photograph_tags包含名為photograph_id的列(照片中的id)。 一張照片可以有很多標簽。 我有一個與三個標簽相關的照片行:男孩,溪流和水。 但是,運行以下查詢將返回0行
SELECT p.*
FROM photographs p, photograph_tags c
WHERE c.photograph_id = p.id
AND (c.value IN ('dog', 'water', 'stream'))
GROUP BY p.id
HAVING COUNT( p.id )=3
這個查詢有問題嗎?
My tables look like so
-----------------------
photographs
-----------------------
id | title | location
------------------------
7 | asdf | c:\...
-----------------------
photograph_tags
-----------------------
id | photograph_id | value
1 | 7 | dog
2 | 7 | water
3 | 7 | stream
4 | 7 | mountains
I want to pull all photograph rows that relate to at least all three of the searched tags
使用您指定的3個標簽(或更多)獲取所有照片。 從標簽開始並加入照片。
select
p.id
from photographs p
left join photograph_tags c
on p.id = c.photograph_id
and c.value IN ('dog', 'water', 'stream')
group by p.id
having count(c.value) >= 3
測試上面的代碼:
create table #photograph_tags (
photograph_id INT,
value varchar(50)
)
create table #photographs (
id int
)
insert into #photographs values (7)
insert into #photographs values (8)
insert into #photograph_tags values (7, 'dog')
insert into #photograph_tags values (7, 'water')
insert into #photograph_tags values (7, 'stream')
insert into #photograph_tags values (7, 'mountains')
insert into #photograph_tags values (8, 'stream')
insert into #photograph_tags values (8, 'mountains')
select * from #photographs
select * from #photograph_tags
select
p.id
from #photographs p
left join #photograph_tags c
on p.id = c.photograph_id
and c.value IN ('dog', 'water', 'stream')
group by p.id
having count(c.value) >= 3
drop table #photograph_tags
drop table #photographs
SELECT p.* FROM photographs p join
(select id, COUNT(id) as TagCount
FROM Photograph_Tags c
WHERE c.value IN ('dog', 'water', 'stream')
group by id)
as TagCounts on p.id = TagCounts.id
WHERE TagCount = 3
SELECT p。* FROM FROM p WHERE(c.value IN('dog','water','stream'))AND(SELECT COUNT(*)FROM photograph_tags c
在哪里c.photograph_id = p.id)> = 3;
會給你帶有至少三個標簽的照片。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.