The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Mysqljoin, !*! reverb, 07-Июн-13, 20:35  [смотреть все]
Имеются 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

Как побороть?

  • 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;




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру