Условия в предложении WHERE и в предложении ON

Предположим, у меня есть две таблицы,

   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-

Java -реализует несколько интерфейсов с одним и тем же методом и разными типами возвратаРассмотрим следующий код :public interface A { public A other (); } общедоступный интерфейс B { общедоступный B другой (); } открытый интерфейс AB расширяет A,B { общедоступный AB другой (); } Это приводит к...

Рассмотрим следующий код:

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?

5
задан Community 23 May 2017 в 11:52
поделиться