我的数据库应用程序包含树表phone
,ad
和phone_ad
。
每个广告可以用一个或多个电话发布在phone_ad
表中。
电话:
---------------------
ph_id | number
---------------------
0 | xxx-xxx-xxxx
1 | yyy-yyy-yyyy
2 | zzz-zzz-zzzz
---------------------
ad:
-----------------------
ad_id | ad_text
-----------------------
11 | text_1
12 | text_2
13 | text_3
-----------------------
phone_ad:
------------------
ad_id | ph_id
------------------
11 | 0
12 | 0
12 | 2
13 | 0
14 | 1
14 | 2
------------------
我正在尝试为每个数字(假设ph_id = 0的数字)查找仅使用该数字发布的广告。这意味着在这种情况下,广告的ad_id = 11和ad_id =13。我尝试了以下查询,但似乎无法正常工作
SELECT ad_id
FROM phone_ad
WHERE ph_id = 0 AND NOT EXISTS (SELECT ad_id FROM phone_ad WHERE ph_id <> 0)
答案 0 :(得分:1)
您快到了。您只需将子查询与外部查询进行关联,以便它们与相同的ad_id
相关联:
SELECT ad_id
FROM phone_ad p
WHERE
ph_id = 0
AND NOT EXISTS (
SELECT ad_id
FROM phone_ad p1
WHERE
p1.ad_id = p.ad_id -- correlation on ad_id
AND p1.ph_id <> p.ph_id
)
答案 1 :(得分:0)
您可以在sabquery上使用join来通过ad_id使用countdistinct ph_id = 1的组结果
select p.ad_id
from phone_ad p
INNER JOIN (
SELECT ad_id
FROM phone_ad
GROUP BY ad_id
having count(distinct ph_id) =1
) t on t.ad_id = p.ad_id
WHERE ph_id = 0