Mysql

如何找到返回多行的查詢之間的區別?

  • January 13, 2020

我有兩個表格,網站和頁面,看起來像這樣:

website
id | name
------------
1  | site 1
2  | site 2
3  | site 3

page
id | name | site_id |  deleted
----------------------------------
1  | home|    1     |     0
2  | pg2 |    1     |     1
3  | pg1 |    2     |     0
4  | pg2 |    2     |     0
5  | pg1 |    3     |     1
6  | this|    3     |     1

在範例中,站點 1 有一個已刪除頁面和一個活動頁面;站點 2 有兩個活動頁面;站點 3 沒有活動頁面。目標是返回沒有活動頁面的網站列表。

我有以下查詢,它為我提供了每個站點的已刪除頁面數:

SELECT w.id, w.name, count(p.id) AS deleted_pages_num
FROM page p
RIGHT JOIN website w ON p.site_id = w.id
WHERE p.deleted = 1
GROUP BY p.site_id

你會在哪裡得到這個結果

id| name   | deleted_pages_num
-------------------------------
1 | site 1 | 1
2 | site 2 | 0
3 | site 3 | 2

反之亦然,您可以設置 p.is_deleted = 0 來獲取每個網站的活動頁面數。我需要找出這兩個查詢之間的區別,以便確定哪些網站已刪除所有頁面。只是對此完全空白。

嘗試使用以下內容:

select * from website a where not exists (select null from page where site_id=a.id and deleted=0)

可能這就是你要的

引用自:https://dba.stackexchange.com/questions/257313