SQL示例:在没有演出的情况下检索musicianID?
假设您有两个表: 音乐家 musicianID主键,int 名称varchar 仪器varchar 演出 GigID主键,int 来自音乐家的音乐家ID外键 位置varchar 我如何检索没有演奏过音乐会的音乐家ID,即在音乐会表中没有参考的音乐家ID 谢谢 例如: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 ) 以
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语句在外部查询中使用了一个值。当人们没有掌握基本知识时,谈论边缘案例毫无意义。一个由乔治·马丁回答的音乐家提问,嗯……一个由乔治·马丁回答的音乐家提问,嗯。。。。。。