Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.143.239] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Таблицы приводить не буду, так как, скорее всего, ошибка где-то на поверхности. Делая запрос:
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' Подскажите, что я неправильно сделал? |
Сообщ.
#2
,
|
|
|
А чё запрос привёл? Его тоже не надо было - ошибка-то на поверхности...
|
Сообщ.
#3
,
|
|
|
Цитата sfs1981 @ Подскажите, что я неправильно сделал? Тебе выше человек - дело говорит. Таблицы то чего не привел? Хотя бы таблицу Hsn. Так как судя по ошибке - в этой таблице нет колонки 'Nn'. |
Сообщ.
#4
,
|
|
|
В таблице Hsn есть колонка Nn. Вот структура:
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 в одном запросе). Но до конца понять не могу. |
Сообщ.
#5
,
|
|
|
Для начала приведу то, как ты ДОЛЖЕН БЫЛ оформить текст запроса, если у тебя есть хотя ,.s минимальное уважение к тем, кто может тебе помочь:
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. |
Сообщ.
#6
,
|
|
|
Akina, Спасибо. Не знал что LEFT JOIN соединяется с последней перечисленной таблицей.
|
Сообщ.
#7
,
|
|
|
sfs1981
Читайте внимательнее "JOIN Syntax" и "Nested Join Optimization". |