[英]MySQL - Select Column 'Name' according to user's choice Where rows in Column 'id' and 'parent' equal each other
[英]MySQL - Select where all rows sharing the same id, each contain a column equal to null
嘗試用這個詞有點棘手,我先舉一個例子
表名:標簽
artist_id(int) | tag_id(int) | main_tag(NULL by default)
這些行可以為每個藝術家包含多個不同的標簽,並且其中一個需要設置為主標簽。
因此,我試圖找出所有當前未在行之一中設置主標簽的藝術家。
例:
artist_id | tag_id | main_tag
2203 4 NULL
2203 53 1
2203 32 NULL
我不想在這里檢索藝術家ID,因為已為此藝術家設置了主要標簽。
鑒於:
artist_id | tag_id | main_tag
1333 23 NULL
1333 44 NULL
我要獲取此artist_id,因為所有main_tag值均為NULL。
我一直在堅持將其放入SQL語句中,將非常感謝您的幫助:)
因此,讓我們分解一下:
以下查詢返回您要忽略的藝術家:
SELECT artist_id
FROM tags
WHERE main_tag IS NOT NULL
因此,您想要的人是不在上面列表中的artist_id的人:
SELECT artist_id,
tag_id
FROM tags
WHERE artist_id NOT IN (SELECT artist_id
FROM tags
WHERE main_tag IS NOT NULL);
如果您只需要artist_id,並且每個藝術家只出現一次,則可以刪除對tag_id的引用,並按歌手分組:
SELECT artist_id
FROM tags
WHERE artist_id NOT IN (SELECT artist_id
FROM tags
WHERE main_tag IS NOT NULL)
GROUP BY artist_id;
提示:如果您要發布數據庫式的東西,可以在sqlfiddle中構建表,然后發布鏈接,這為人們提供了一個起點。 我做到了,鏈接是http://sqlfiddle.com/#!2/db53d/2
以下查詢產生的結果與@AMADNON Inc.的查詢結果相同。
A.分組依據和擁有
SELECT artist_id
FROM tags
GROUP BY artist_id
HAVING SUM(main_tag IS NULL) = COUNT(*);
B.內聯接
SELECT DISTINCT t1.artist_id
FROM tags t1 INNER JOIN (
SELECT artist_id
FROM tags WHERE main_tag IS NOT NULL
) t2 ON t1.artist_id != t2.artist_id;
C.不存在
SELECT DISTINCT artist_id
FROM tags t1
WHERE NOT EXISTS (
SELECT 1
FROM tags
WHERE main_tag IS NOT NULL
AND artist_id = t1.artist_id
);
如果您有很多數據,那么讓我知道每個查詢的性能結果會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.