我们有两个表:
文档:id,title,document_type_id,showon_id
DocumentType:id,name
关系:DocumentType有很多文档.(Document.document_type_id = DocumentType.id)
我们希望检索给定ShowOn_Id的所有文档类型的列表.
我们看到两种可能性:
SELECT DocumentType.* FROM DocumentType WHERE DocumentType.id IN ( SELECT DISTINCT Document.document_type_id FROM Document WHERE showon_id = 42 ); SELECT DocumentType.* FROM DocumentType WHERE DocumentType.id IN ( SELECT Document.document_type_id FROM Document WHERE showon_id = 42 );
我们的问题是:何时以及是否更好地使用DISTINCT获取较小的记录集而不是检索整个表和IN语句将表格移动到第一个匹配.(我们猜这就是它的作用;-))
对于不同的数据库,这是不同的,有一个共同的答案吗?
或者有更好的方法吗?(我们在.NET领域)
您可以使用联接:
SELECT DISTINCT DocumentType.* FROM DocumentType INNER JOIN Document ON DocumentType.id=Document.document_type_id WHERE Document.showon_id = 42
我认为这是最好的方法.