如果存在其他2个表中的匹配项,则获取所有表值

维加

我有一个表“通道”。

channelId
a
b
c
d

表格“视频”

videoId | channelId
1       | a
2       | b
3       | c
4       | e

表“评论”

commentID | videoID | videoID_channelID
xx        | 1       | a
yy        | 2       | b
zz        | 5       | e
tt        | 6       | f

关键是:

  • channel.channelId = video.channelId = comment.videoID_channelID
  • video.videoId = comment.videoID

我需要:

  • 所有带有至少1个视频和1条评论的频道
  • 所有带有至少1个频道和1条评论的视频
  • 带有视频和频道的所有评论

因此,我想执行3条SQL语句,每个引用另一个表的表2。

我用双重内部联接(https://www.sqlitetutorial.net/sqlite-inner-join/进行了尝试,但似乎返回了所有适合的组合,而不是:

channelId
a
b

videoId | channelId
1       | a
2       | b

commentID | videoID | videoID_channelID
xx        | 1       | a
yy        | 2       | b

到目前为止,我的代码可以使所有频道至少包含1个视频和1条评论:

SELECT
        channel.channelId
FROM
    channel
    INNER JOIN video ON video.channelId = channel.channelId
    INNER JOIN comment ON comment.videoID_channelID = video.channelId
去世

您可以通过连接所有3个表的相同查询来获得所需的所有结果,但是对于每种情况,请选择不同的列:

SELECT c.channelId
FROM channel c
INNER JOIN video v ON v.channelId = c.channelId
INNER JOIN comment cm ON cm.videoID_channelID = v.channelId;

SELECT v.videoID, c.channelId
FROM channel c
INNER JOIN video v ON v.channelId = c.channelId
INNER JOIN comment cm ON cm.videoID_channelID = v.channelId;

SELECT cm.commentID, v.videoID, c.channelId
FROM channel c
INNER JOIN video v ON v.channelId = c.channelId
INNER JOIN comment cm ON cm.videoID_channelID = v.channelId;

如果实际数据中有重复项,则可能必须在每个SELECT之后添加DISTINCT。
参见演示
结果:

| channelId |
| --------- |
| a         |
| b         |


| videoID | channelId |
| ------- | --------- |
| 1       | a         |
| 2       | b         |


| commentID | videoID | channelId |
| --------- | ------- | --------- |
| xx        | 1       | a         |
| yy        | 2       | b         |

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果通过左连接在其他表中不匹配,则选择值

来自分类Dev

如果其他两个表中的值匹配,则更新表中的值

来自分类Dev

如果两个其他表中的其他两个ID匹配,则获取一个ID

来自分类Dev

如果表中存在其他数据,则根据条件从表中删除行

来自分类Dev

查询表 1 中的所有值,仅查询表 2 中的匹配项

来自分类Dev

在第3个表中插入数据,并在其他2个表中插入值

来自分类Dev

如果匹配值与其他单元格匹配,则从其他工作表中获取其他单元格的值

来自分类Dev

如果第一个表中还有其他数据,如何从第二个表中获取单个值?

来自分类Dev

Linq:获取其他表中存在值的行

来自分类Dev

从表中获取与数组中的值匹配的所有值?

来自分类Dev

两个表获取其他表中具有共同值或没有值的值

来自分类Dev

如果其他表中的列与值匹配,则更新表中的列

来自分类Dev

在其他列上有条件地从 hive 表中获取最新的列值

来自分类Dev

如果只有一个匹配项,则从连接表中返回所有相关行

来自分类Dev

通过与其他2个表进行交叉检查来查询从表中获取不匹配的记录

来自分类Dev

如何使用其他工作表中的所有值填充Google文档中的一个工作表?

来自分类Dev

mysql在其他表中不存在

来自分类Dev

实体框架 - 只有在其他表中匹配的记录时才检索

来自分类Dev

获取在其他表中维护的Column的数据

来自分类Dev

检查值是否在其他表中

来自分类Dev

如果值存在,则从其他表中选择

来自分类Dev

查找,如果表1中没有匹配项,则查找表2

来自分类Dev

合并两个表,包括在其他表中找不到的行,替换列中的值

来自分类Dev

如果其他表中不存在id,则获取不同的行并使用合并

来自分类Dev

如果在表2中存在MySQL,请从表1中选择所有数据,并通过ID从表2中选择替换值

来自分类Dev

如果其他表中存在值,则mysql仅执行插入

来自分类Dev

Mysql - 如果同一表的其他行中不存在值,则更新行

来自分类Dev

SQL查询从表1中获取2个值,并从表2中加入所有可能的选项

来自分类Dev

MySQL JOIN->即使没有匹配项,也从正确的表中获取所有数据

Related 相关文章

  1. 1

    如果通过左连接在其他表中不匹配,则选择值

  2. 2

    如果其他两个表中的值匹配,则更新表中的值

  3. 3

    如果两个其他表中的其他两个ID匹配,则获取一个ID

  4. 4

    如果表中存在其他数据,则根据条件从表中删除行

  5. 5

    查询表 1 中的所有值,仅查询表 2 中的匹配项

  6. 6

    在第3个表中插入数据,并在其他2个表中插入值

  7. 7

    如果匹配值与其他单元格匹配,则从其他工作表中获取其他单元格的值

  8. 8

    如果第一个表中还有其他数据,如何从第二个表中获取单个值?

  9. 9

    Linq:获取其他表中存在值的行

  10. 10

    从表中获取与数组中的值匹配的所有值?

  11. 11

    两个表获取其他表中具有共同值或没有值的值

  12. 12

    如果其他表中的列与值匹配,则更新表中的列

  13. 13

    在其他列上有条件地从 hive 表中获取最新的列值

  14. 14

    如果只有一个匹配项,则从连接表中返回所有相关行

  15. 15

    通过与其他2个表进行交叉检查来查询从表中获取不匹配的记录

  16. 16

    如何使用其他工作表中的所有值填充Google文档中的一个工作表?

  17. 17

    mysql在其他表中不存在

  18. 18

    实体框架 - 只有在其他表中匹配的记录时才检索

  19. 19

    获取在其他表中维护的Column的数据

  20. 20

    检查值是否在其他表中

  21. 21

    如果值存在,则从其他表中选择

  22. 22

    查找,如果表1中没有匹配项,则查找表2

  23. 23

    合并两个表,包括在其他表中找不到的行,替换列中的值

  24. 24

    如果其他表中不存在id,则获取不同的行并使用合并

  25. 25

    如果在表2中存在MySQL,请从表1中选择所有数据,并通过ID从表2中选择替换值

  26. 26

    如果其他表中存在值,则mysql仅执行插入

  27. 27

    Mysql - 如果同一表的其他行中不存在值,则更新行

  28. 28

    SQL查询从表1中获取2个值,并从表2中加入所有可能的选项

  29. 29

    MySQL JOIN->即使没有匹配项,也从正确的表中获取所有数据

热门标签

归档