Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL示例:在没有演出的情况下检索musicianID?_Sql - Fatal编程技术网

SQL示例:在没有演出的情况下检索musicianID?

SQL示例:在没有演出的情况下检索musicianID?,sql,Sql,假设您有两个表: 音乐家 musicianID主键,int 名称varchar 仪器varchar 演出 GigID主键,int 来自音乐家的音乐家ID外键 位置varchar 我如何检索没有演奏过音乐会的音乐家ID,即在音乐会表中没有参考的音乐家ID 谢谢 例如: SELECT * FROM Musicians m WHERE NOT EXISTS ( SELECT 1 FROM Gigs g WHERE g.musicianID = m.musicianID ) 以

假设您有两个表:

音乐家 musicianID主键,int 名称varchar 仪器varchar 演出 GigID主键,int 来自音乐家的音乐家ID外键 位置varchar 我如何检索没有演奏过音乐会的音乐家ID,即在音乐会表中没有参考的音乐家ID

谢谢

例如:

SELECT *
FROM Musicians m
WHERE NOT EXISTS (
    SELECT 1
    FROM Gigs g
    WHERE g.musicianID = m.musicianID
)
以下是有关的MySQL文档。

例如:

SELECT *
FROM Musicians m
WHERE NOT EXISTS (
    SELECT 1
    FROM Gigs g
    WHERE g.musicianID = m.musicianID
)

以下是上的MySQL文档。

这可能比martin建议的查询更有效,因为它不使用子查询:

select musicianID
from musicians m
left join gigs g on g.musicianId = m.musicianID
where g.musicianId is null

这可能比martin建议的查询更有效,因为它不使用子查询:

select musicianID
from musicians m
left join gigs g on g.musicianId = m.musicianID
where g.musicianId is null

是的,但它有一个连接。我会检查特定系统上的查询分析器,以确定:当然-我肯定在mysql上,这对于任何非琐碎的数据量都会更有效-子查询是一种固定的功能。@Arthur Thomas:联接总是比子查询快。大多数情况下,子查询是1*N2,连接是1+N2或OmaxN1,N2-这就像一个嵌套循环。@Hogan:当子查询是一个相关子查询时,它就像一个嵌套循环,但是一个简单的子查询,如select ID from User,其中name='bobo'通常由编译器优化为只运行一次。@OrbMan:当然,可能是真的,这取决于实现—这里不是这种情况,子查询中的where语句在外部查询中使用了一个值。当人们没有掌握基本知识时,谈论边缘案例是没有意义的。是的,但它确实是一种连接。我会检查特定系统上的查询分析器,以确定:当然-我肯定在mysql上,这对于任何非琐碎的数据量都会更有效-子查询是一种固定的功能。@Arthur Thomas:联接总是比子查询快。大多数情况下,子查询是1*N2,连接是1+N2或OmaxN1,N2-这就像一个嵌套循环。@Hogan:当子查询是一个相关子查询时,它就像一个嵌套循环,但是一个简单的子查询,如select ID from User,其中name='bobo'通常由编译器优化为只运行一次。@OrbMan:当然,可能是真的,这取决于实现—这里不是这种情况,子查询中的where语句在外部查询中使用了一个值。当人们没有掌握基本知识时,谈论边缘案例毫无意义。一个由乔治·马丁回答的音乐家提问,嗯……一个由乔治·马丁回答的音乐家提问,嗯。。。。。。