На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Ошибка в Join
    Таблицы приводить не буду, так как, скорее всего, ошибка где-то на поверхности. Делая запрос:
    ExpandedWrap disabled
      SELECT Hsn.Nn,Fsum,Opl,Fsum-Opl,Users.Nt as ASuser,U2.Nt as APuser FROM Hsn,Post,Users, Users as U2 LEFT OUTER JOIN Hsn_pay_shedule ON Hsn.Nn = Hsn_pay_shedule.Nn WHERE Hsn.Post=(SELECT Ind FROM Post WHERE Nt='sdfds') AND Hsn.Suser = Users.Ind AND Hsn.Puser = U2.Ind AND Hsn.Nn LIKE 'ПН-%' AND Hsn.Post=Post.Ind AND Hsn.Status=1 AND Fsum-Opl>0 ORDER BY Hsn.Nn

    Получаю ошибку:
    #1054 - Unknown column 'Hsn.Nn' in 'on clause'

    Подскажите, что я неправильно сделал?
      А чё запрос привёл? Его тоже не надо было - ошибка-то на поверхности...
        Цитата sfs1981 @
        Подскажите, что я неправильно сделал?

        Тебе выше человек - дело говорит. Таблицы то чего не привел? Хотя бы таблицу Hsn. Так как судя по ошибке - в этой таблице нет колонки 'Nn'.
          В таблице Hsn есть колонка Nn. Вот структура:
          ExpandedWrap disabled
            CREATE TABLE IF NOT EXISTS `Hsn` (
              `Nn` varchar(20) NOT NULL,
              `Cdat` datetime DEFAULT NULL,
              `Pdat` datetime DEFAULT NULL,
              `Post` int(11) DEFAULT '0',
              `Suser` int(3) DEFAULT '0',
              `Puser` int(3) DEFAULT '0',
              `Status` int(3) DEFAULT '0',
              `Vnum` varchar(100) DEFAULT NULL,
              `Psum` decimal(10,2) DEFAULT '0.00',
              `Fsum` decimal(10,2) DEFAULT '0.00',
              `Opl` decimal(10,2) DEFAULT '0.00',
              `Exp` varchar(100) DEFAULT NULL,
              PRIMARY KEY (`Nn`),
              UNIQUE KEY `Nn_UNIQUE` (`Nn`)
            );
             
            CREATE TABLE IF NOT EXISTS `Hsn_pay_shedule` (
              `Nn` varchar(20) NOT NULL,
              `Dopl` date DEFAULT NULL,
              `Sum` decimal(10,2) DEFAULT '0.00',
              PRIMARY KEY (`Nn`),
              UNIQUE KEY `Nn_UNIQUE` (`Nn`)
            );
             
             
            CREATE TABLE IF NOT EXISTS `Users` (
              `Ind` int(11) NOT NULL AUTO_INCREMENT,
              `Nt` varchar(255) NOT NULL,
              `Card` varchar(45) DEFAULT NULL,
              `Rekv` text,
              `Level` varchar(2) NOT NULL,
              PRIMARY KEY (`Ind`),
              UNIQUE KEY `Ind_UNIQUE` (`Ind`),
              UNIQUE KEY `Nt_UNIQUE` (`Nt`)
            ) ;

          Подозреваю, что проблема в объявлении объединений (таблицы через запятую и LEFT OUTER JOIN в одном запросе). Но до конца понять не могу.
            Для начала приведу то, как ты ДОЛЖЕН БЫЛ оформить текст запроса, если у тебя есть хотя ,.s минимальное уважение к тем, кто может тебе помочь:
            ExpandedWrap disabled
              SELECT
                Hsn.Nn
              , Fsum
              , Opl
              , Fsum-Opl
              , Users.Nt as ASuser
              , U2.Nt as APuser
              FROM
                Hsn
              , Post
              , Users
              , Users as U2
              LEFT OUTER JOIN
                Hsn_pay_shedule ON Hsn.Nn = Hsn_pay_shedule.Nn
              WHERE
                Hsn.Post=(
                          SELECT Ind
                          FROM Post
                          WHERE Nt='sdfds'
                         )
              AND
                Hsn.Suser = Users.Ind
              AND
                Hsn.Puser = U2.Ind
              AND
                Hsn.Nn LIKE 'ПН-%'
              AND
                Hsn.Post=Post.Ind
              AND
                Hsn.Status=1
              AND
                Fsum-Opl>0
              ORDER BY
                Hsn.Nn


            А теперь о сути проблемы. Тебе нужно внимательно читать мануал - особенно о том, в каком порядке выполняются связывания.

            В данном случае первым выполняется LEFT JOIN. А именно Users as U2 LEFT OUTER JOIN Hsn_pay_shedule. Надо ли удивляться, что сервер не находит для связывания поле Hsn.Nn?

            Вариантов решения - два.
            Тупой - поменять порядок таблиц в секции FROM.
            Правильный - привести текст секции в соответствие с логикой процесса и особенностями выполнения и оптимизации связывания в MySQL.
              Akina, Спасибо. Не знал что LEFT JOIN соединяется с последней перечисленной таблицей.
                sfs1981
                Читайте внимательнее "JOIN Syntax" и "Nested Join Optimization".
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0264 ]   [ 15 queries used ]   [ Generated: 27.04.24, 23:40 GMT ]