对于每个数字,查找仅使用该数字发布的广告
For each number find ads that was published with only that number
我的数据库应用程序包含树 tables phone
、ad
和 phone_ad
。
每个广告可以在 phone_ad
table.
中发布一个 phone 或更多
phone:
---------------------
ph_id | number
---------------------
0 | xxx-xxx-xxxx
1 | yyy-yyy-yyyy
2 | zzz-zzz-zzzz
---------------------
广告:
-----------------------
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)
您可以在 sabquery 上使用 join 作为组的结果 ad_id with 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
你快到了。您只需要 关联 子查询与外部查询,以便它们与相同的 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
)
我的数据库应用程序包含树 tables phone
、ad
和 phone_ad
。
每个广告可以在 phone_ad
table.
phone:
---------------------
ph_id | number
---------------------
0 | xxx-xxx-xxxx
1 | yyy-yyy-yyyy
2 | zzz-zzz-zzzz
---------------------
广告:
-----------------------
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)
您可以在 sabquery 上使用 join 作为组的结果 ad_id with 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
你快到了。您只需要 关联 子查询与外部查询,以便它们与相同的 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
)