mysql - 根据两个表选择记录

标签 mysql

假设我有三个表,分别称为比特率、歌曲和文件。

表-比特率

 -------------------------------
|  bitrate_id  | bitrate_name   |
---------------------------------
|      1       |    128kbps     |
---------------------------------
|      2       |    320kbps     |
---------------------------------

table -歌曲

 -------------------------------
|  song_id     |   song_title   |
---------------------------------
|      1       |    My song 1   |
---------------------------------
|      2       |    My song 2   |
---------------------------------

表格文件

 ---------------------------------------------------------------------
|  file_id     |     song_id    |   song_location  |   bitrate_id    |
----------------------------------------------------------------------
|      1       |       1        |      loc 1       |       1         |
----------------------------------------------------------------------
|      2       |       2        |      loc 2       |       1         |
---------------------------------------------------------------------

我有一个应用程序,用户可以在其中创建歌曲并在特定歌曲下上传不同的比特率轨道。假设我有一首名为“我的歌曲 1”的歌曲。当用户向这首歌曲添加不同的比特率轨道时,用户必须从“

”生成的选择框中选择比特率

SELECT * FROM bitrate

如果用户将128kbps轨道添加到“我的歌曲1”,然后当他将另一个轨道上传到同一首歌曲时,他无法选择“128kbps”再次强调“比特率。意思是我想检查一首歌曲是否已经有 128kbps 比特率歌曲,然后当我查询比特率表时,只显示除“128kbps”之外的其他比特率。如何实现这一目标?谢谢

上传表格

enter image description here

最佳答案

你好,伙计。您可以尝试使用条件NOT IN来选择当前歌曲未使用的比特率。

SELECT * FROM `bitrate` AS `b` WHERE b.bitrate_id NOT IN 
    (SELECT `bitrate_id` FROM `file` 
         WHERE `file_id` = {{here comes the actual file ID}}
    );

在上面的查询中,我们尝试选择其bitrate_id不存在于表文件的某些行中的比特率

了解有关NOT IN条件的更多信息 here

关于mysql - 根据两个表选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38485063/

相关文章:

当您有纪元或 sysmillis 时间戳时,mysql select、sum、group by date

MySQL 不作为服务启动

mysql - 在 nodeJS 应用程序中发送默认角色

php - 如何从一张表中查找不匹配的记录

mysql - mysql中SUM的问题

php - Drupal 站点迁移未定义的类常量 'MYSQL_ATTR_USE_BUFFERED_QUERY'

mysql - 如何从学校日期列表中查找累计缺勤日期

mysql - 状态属性的数据库模型

mysql join 2 tables - 显示一个表中的所有行

php - 从数据库向多个地址发送电子邮件