- Mysqljoin, reverb, 22:11 , 07-Июн-13 (1)
>[оверквотинг удален] > | > | 3 | Карандаш | 5 | Зелёная машинка > | > +----+-----------+----+---------------------+ > 9 rows in set (0.00 sec) > Но вот как быть если надо выбрать SELECT id,name,description FROM nomenclature INNER > JOIN description; > Mysql ругается на ERROR 1052 (23000): Column 'id' in field list is > ambiguous > Как побороть?Ээх, ну указал с какой таблицы id :) Вопрос снят.
- Mysqljoin, DeadLoco, 14:31 , 10-Июн-13 (2)
> Ээх, ну указал с какой таблицы id :) На будущее: крайне настоятельно рекомендуется в любых запросах алиасить имена таблиц, даже если она одна.
SELECT w.* FROM table AS w WHERE w.key = blabla ORDER BY w.value ASC;SELECT w.value FROM table1 AS w JOIN table2 AS z ON z.id = w.zid WHERE w.key = blabla AND z.key = foofoo ORDER BY w.value ASC;
- Mysqljoin, reverb, 20:08 , 10-Июн-13 (3)
>[оверквотинг удален] > SELECT w.* > FROM table AS w > WHERE w.key = blabla > ORDER BY w.value ASC; > SELECT w.value > FROM table1 AS w > JOIN table2 AS z ON z.id = w.zid > WHERE w.key = blabla > AND z.key = foofoo > ORDER BY w.value ASC; Почему так? С точки зрения производительности?
- Mysqljoin, DeadLoco, 20:50 , 10-Июн-13 (4)
> Почему так? С точки зрения производительности?С точки зрения разработки и поддержания кода. Если вы в будущем захотите заменить одну таблицу на другую, с дополненной и исправленной структурой, то менять придется одну строку в каждом запросе, а не все, где упоминается оригинальное имя таблицы. Сравните: SELECT w.id, w.name, z.title AS job_title, s.title AS tool_title FROM users AS w JOIN jobs AS z ON z.id = w.job_id JOIN tools AS s ON s.id = z.tool.id WHERE s.id = somevalue AND w.id IN (1,3,5,7) ORDER BY w.id, z.id, s.id;
и SELECT users.id, users.name, jobs.title AS job_title, tools.title AS tool_title FROM users JOIN jobs ON jobs.id = users.job_id JOIN tools ON tools.id = jobs.tool_id WHERE tools.id = somevalue AND users.id IN (1,3,5,7) ORDER BY users.id, jobs.id, tools.id;
|