Мне было интересно, как именно внутренние соединения работают в mysql.INNER JOIN Выполнение/оценка заказа
Если я
SELECT * FROM A a
INNER JOIN B b ON a.row = b.row
INNER JOIN C c ON c.row2 = b.row2
WHERE name='Paul';
ли делать это стыки, а затем выбрать те, где имя = PAUL? Потому что, когда я делаю это так, это SUPER DUPER медленно.
есть способ сделать что-то вдоль линий:
SELECT * FROM (A a WHERE name='paul')
INNER JOIN B b ON a.row = b.row
INNER JOIN C c ON c.row2 = b.row2]
Когда я пытаюсь это таким образом, я просто получаю сообщение об ошибке.
или, альтернативно, лучше просто иметь 3 отдельных запроса, один для A, B и C? пример:
string query1 = "SELECT * FROM A WHERE name = 'paul'";
//send query, get data reader
string query2 = "SELECT * FROM b WHERE b = " + query1.b;
//send query, get data reader
string query3 = "SELECT * FROM C WHERE c = " + query1.c;
//send query, get data reader
Очевидно, что это всего лишь псевдокод, но я думаю, что это иллюстрирует точку.
Какой способ ускорен/рекомендуется?
Редактировать Структура таблицы:
**tblTimesheet**
int timesheetID (primary key)
datetime date
varchar username
int projectID
string description
float hours
**tblProjects**
int projectID (primary key)
string project name
int clientID
**tblClients**
int clientID
string clientName
The join that I want is:
select * from tblTimesheet time
INNER JOIN tblProject proj on time.projectID = proj.projectID
INNER JOIN tblClient client on proj.clientID = client.clientID
WHERE username = 'paul';
что-то подобное
Ваш первый запрос выглядит нормально; индексируются номера строк? –
Этот вопрос также затрагивается в этом вопросе - http://stackoverflow.com/questions/228424/in-what-order-are-mysql-joins-оценен – dash