MySQL - 选择共享相同 id 的所有行,每行包含一个等于 null 的列

标签 mysql sql

这个词有点棘手,我先举个例子

表名:标签

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

关于MySQL - 选择共享相同 id 的所有行,每行包含一个等于 null 的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21010310/

相关文章:

sql - MySQL数据版本控制

MYSQL 舍入问题

mysql - 我的 SQL 查询获取共同/ friend 关注者

mysql - SQL - 使用 COUNT 查询时出现问题

mysql加入: what is faster?

java - RDBMSLoginModule : ClassCastException com. ibm.ws.jdbc.DataSourceService 到 javax.sql.DataSource

python - 查询父类(super class)和继承类

sql - 基本的连接查询理解

sql - 创建具有可变数量参数的存储过程

C# 将数据插入 SQL 数据库的最快方法