Имеются 2 таблицы. Делаем выборку * собъединениемmysql> SELECT * FROM nomenclature INNER JOIN description;
+----+-----------+----+---------------------+
| id | name | id | description |
+----+-----------+----+---------------------+
| 1 | Книга | 1 | Замечательная книга |
| 2 | Табуретка | 1 | Замечательная книга |
| 3 | Карандаш | 1 | Замечательная книга |
| 1 | Книга | 3 | Красный карандаш |
| 2 | Табуретка | 3 | Красный карандаш |
| 3 | Карандаш | 3 | Красный карандаш |
| 1 | Книга | 5 | Зелёная машинка |
| 2 | Табуретка | 5 | Зелёная машинка |
| 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
Как побороть?
>[оверквотинг удален]
> |
> | 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 :)
Вопрос снят.
> Ээх, ну указал с какой таблицы 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;
>[оверквотинг удален]
>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;Почему так? С точки зрения производительности?
> Почему так? С точки зрения производительности?С точки зрения разработки и поддержания кода. Если вы в будущем захотите заменить одну таблицу на другую, с дополненной и исправленной структурой, то менять придется одну строку в каждом запросе, а не все, где упоминается оригинальное имя таблицы. Сравните:
и
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;