Предположим, у меня есть две таблицы,
Student Test
Id Name TestId Type StudentId
-- ---- ------ ---- ---------
1 Mark 774 Hard 1
2 Sam 774 Hard 2
3 John 775 Easy 3
Теперь я должен найти тех студентов (, идентификатор студента, имя и идентификатор ), которые прошли «сложный» тип теста в MySql.
Какой из них лучше (По производительности )?.
1.Select student.id,student.name,test.testid
from student
join test
on test.studentid=student.id and test.type='hard'
2.Select student.id,student.name,test.testid
from student
join test
on test.studentid=student.id
where test.type='hard'
Могу я узнать причину?(Предположим, что есть миллионы студентов и миллионы типов тестов )
-. 121 ---1870379-
Рассмотрим следующий код:
public interface A {
public A another();
}
public interface B {
public B another();
}
public interface AB extends A,B {
public AB another();
}
Это приводит к ошибке компиляции наAB
:
types B and A are incompatible; both define another(), but with unrelated return types
Я видел этот вопрос SO и следую примеру несовместимости в принятом ответе -, т.е.
public interface C {
public void doSomething();
}
public interface D {
public boolean doSomething();
}
public interface CD extends C,D {
}
Однако в этом случае возвращаемые типы были действительно несовместимы -, возвращаемый тип не может быть одновременно и пустым, и логическим. Принимая во внимание, что в моем примере выше тип возврата another()
для AB
является одновременно A
и B
, поэтому можно реализовать оба расширенных интерфейса.
Кроме того, посмотрев на JLS (8.4.8, 8.4.8.3, 8.4.8.4 ), я не совсем понимаю, почему мой пример выше незаконен. Кто-нибудь может мне это объяснить?
Во-вторых, существуют ли какие-либо решения/обходные пути, кроме повторения требований контракта A
или B
в AB
?