Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WHERE после JOIN, Проблема с сочитанием "WHERE после JOIN" 
V
    Опции темы
Pena
  Дата 16.3.2012, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



Потритил много времени, но так и не осили самостоятельно - подскажите, пжл:
Делаю фильтрацию по сводной таблице, соответственно запрос на получение данных принял вид:
Код

SELECT
 1_Data.Index AS 'IndexЗаявки',

  1_Applicants.ShortName AS 'КраткоеНаименованиеЗаявителя',
  1_Applicants.FullName AS 'ПолноеНаименованиеЗаявителя',

    ЮАС.Name AS 'ЮА_НазваниеСтраны',

   ЮА.PostalIndex AS 'ЮА_ПочтовыйИндекс',
   ЮА.Region AS 'ЮА_Region',
   ЮА.Area AS 'ЮА_Район',
   ЮА.City AS 'ЮА_Город',
   ЮА.Street AS 'ЮА_Улица',
   ЮА.House AS 'ЮА_НомерДома',

    ФАС.Name AS 'ФА_НазваниеСтраны',

   ФА.PostalIndex AS 'ФА_ПочтовыйИндекс',
   ФА.Region AS 'ФА_Region',
   ФА.Area AS 'ФА_Район',
   ФА.City AS 'ФА_Город',
   ФА.Street AS 'ФА_Улица',
   ФА.House AS 'ФА_НомерДома',

   2_PatternsOfOwnership.Abbreviation AS 'КраткоеНаименованиеФормыСобственности',
   2_PatternsOfOwnership.FullName AS 'ПолноеНаименованиеФормыСобственности',

  1_Applicants.NumberOfPassport AS 'СерияИНомерПаспорта',
  1_Applicants.GivenOutPassport AS 'КемВыданПаспорт',
  1_Applicants.DateOfDeliveryOfPassport AS 'ДатаВыдачиПаспорта',
  1_Applicants.OGRN AS 'ОГРН',
  1_Applicants.INN AS 'ИНН',
  1_Applicants.Contacts  AS 'ДанныеДляСвязи',

 1_Data.Responsible AS 'Ответственный',
 1_Data.Requisites AS 'Requisites',
 1_Data.QuantityOfTradingPlaces AS 'КоличествоТорговыхМест',
 1_Data.ListOfOffers AS 'ПереченьТоваров',
 1_Data.KindOfOffers AS 'ВидТовара',
 1_Data.APointOfProduction AS 'МестоПроизводства',
 1_Data.ReadoutDate AS 'ДатаОтсчёта',
 1_Data.EndDate AS 'ДатаЗавершения',

  2_Fairs.Name AS 'НазваниеЯрмарки',
  2_Fairs.Address AS 'AddressЯрмарки',

   2_AdministrativeDistricts.Name AS 'НазваниеАдминистративногоОкруга',

 1_Data.SubmittedDocuments AS 'ПереченьПоданныхДокументов',
 1_Data.RegistrationNumber AS 'РегистрационныйНомер',
 1_Data.ApplicationDate AS 'ДатаОформления',
 1_Data.ApplicationTime AS 'ВремяОформления',
 1_Data.WhoAddsDemand AS 'КемОформлено',
 1_Data.AdditionalInformation AS 'ДополнительныеСведенья'

 FROM `1_Data`
  LEFT JOIN `1_Applicants` ON 1_Applicants.Index = 1_Data.IndexOfApplicant
   LEFT JOIN `1_Addresses` AS `ЮА` ON ЮА.Index = 1_Applicants.IndexOfKeyAddress
    LEFT JOIN `2_Сountries` AS `ЮАС` ON ЮАС.Index = ЮА.IndexOfСountry
   LEFT JOIN `1_Addresses` AS `ФА` ON ФА.Index = 1_Applicants.IndexOfSecondAddress
    LEFT JOIN `2_Сountries` AS `ФАС` ON ФАС.Index = ФА.IndexOfСountry
   LEFT JOIN `2_PatternsOfOwnership` ON 2_PatternsOfOwnership.Index = 1_Applicants.IndexOfPatternOfOwnership
  LEFT JOIN `2_Fairs` ON 2_Fairs.Index = 1_Data.IndexOfFair
   LEFT JOIN `2_AdministrativeDistricts` ON (2_AdministrativeDistricts.Index = 2_Fairs.IndexOfAdministrativeDistrict)

WHERE 'КраткоеНаименованиеФормыСобственности' = 'ФЛ'

ORDER BY `ФА_НазваниеСтраны`, `ФА_Region` ASC


...сее творение на удивление работает (без включение строки "WHERE...), и даже сортировка работает... но если включить строку "WHERE" возвращается пустой результат (не ошибка). Выручите, люди добрые! 

Это сообщение отредактировал(а) Pena - 16.3.2012, 15:32
--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
Akina
Дата 16.3.2012, 15:38 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Pena @  16.3.2012,  16:27 Найти цитируемый пост)
если включить строку "WHERE" возвращается пустой результат 

Коню понятно - сравнение литералов 'КраткоеНаименованиеФормыСобственности' и 'ФЛ' вернёт false, ибо они даже на глазок - и то разные...

Цитата(Pena @  16.3.2012,  16:27 Найти цитируемый пост)
Выручите, люди добрые! 

СУБД назовите.




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Pena
Дата 16.3.2012, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



1. Значит я не конь xD Я думал благодаря строке >

25: 2_PatternsOfOwnership.Abbreviation AS 'КраткоеНаименованиеФормыСобственности'

в строке >

66: WHERE 'КраткоеНаименованиеФормыСобственности' = 'ФЛ'

будет сравниваться ячейка со значением... а не сами значения =\
Как правильно то поступить?

2. MySQL
--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
Akina
Дата 16.3.2012, 15:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Pena @  16.3.2012,  16:45 Найти цитируемый пост)
Как правильно то поступить?

Обратиться к документации по MySQL.
Прочитать, какие кавычки для каких целей используются.
Заменить отфонарные кавычки необходимыми.
По-хорошему - избавиться от кириллицы в именах и алиасах.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Pena
Дата 16.3.2012, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



Да, я изначально использовал ` (я так понимаю в данном случае можно даже не обрамлять), только с ними ошибка возвращалась:

Unknown column 'ПолноеНаименованиеЗаявителя' in 'where clause'

 - я думал ' вылечил))

А тогда в чём ошибка? Мне кажется (как и указал в теме), что я неправильно написал запрос, а именно сочитание JOIN и WHERE =\

Это сообщение отредактировал(а) Pena - 16.3.2012, 16:18
--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
Akina
Дата 16.3.2012, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Код

SELECT
   1_Data.Index AS `IndexЗаявки`,

   1_Applicants.ShortName AS `КраткоеНаименованиеЗаявителя`,
   1_Applicants.FullName AS `ПолноеНаименованиеЗаявителя`,

   `ЮАС`.Name AS `ЮА_НазваниеСтраны`,

   `ЮА`.PostalIndex AS `ЮА_ПочтовыйИндекс`,
   `ЮА`.Region AS `ЮА_Region`,
   `ЮА`.Area AS `ЮА_Район`,
   `ЮА`.City AS `ЮА_Город`,
   `ЮА`.Street AS `ЮА_Улица`,
   `ЮА`.House AS `ЮА_НомерДома`,

   `ФАС`.Name AS `ФА_НазваниеСтраны`,

   `ФА`.PostalIndex AS `ФА_ПочтовыйИндекс`,
   `ФА`.Region AS `ФА_Region`,
   `ФА`.Area AS `ФА_Район`,
   `ФА`.City AS `ФА_Город`,
   `ФА`.Street AS `ФА_Улица`,
   `ФА`.House AS `ФА_НомерДома`,

   2_PatternsOfOwnership.Abbreviation AS `КраткоеНаименованиеФормыСобственности`,
   2_PatternsOfOwnership.FullName AS `ПолноеНаименованиеФормыСобственности`,

   1_Applicants.NumberOfPassport AS `СерияИНомерПаспорта`,
   1_Applicants.GivenOutPassport AS `КемВыданПаспорт`,
   1_Applicants.DateOfDeliveryOfPassport AS `ДатаВыдачиПаспорта`,
   1_Applicants.OGRN AS `ОГРН`,
   1_Applicants.INN AS `ИНН`,
   1_Applicants.Contacts  AS `ДанныеДляСвязи`,

   1_Data.Responsible AS `Ответственный`,
   1_Data.Requisites AS `Requisites`,
   1_Data.QuantityOfTradingPlaces AS `КоличествоТорговыхМест`,
   1_Data.ListOfOffers AS `ПереченьТоваров`,
   1_Data.KindOfOffers AS `ВидТовара`,
   1_Data.APointOfProduction AS `МестоПроизводства`,
   1_Data.ReadoutDate AS `ДатаОтсчёта`,
   1_Data.EndDate AS `ДатаЗавершения`,

   2_Fairs.Name AS `НазваниеЯрмарки`,
   2_Fairs.Address AS `AddressЯрмарки`,

   2_AdministrativeDistricts.Name AS `НазваниеАдминистративногоОкруга`,

   1_Data.SubmittedDocuments AS `ПереченьПоданныхДокументов`,
   1_Data.RegistrationNumber AS `РегистрационныйНомер`,
   1_Data.ApplicationDate AS `ДатаОформления`,
   1_Data.ApplicationTime AS `ВремяОформления`,
   1_Data.WhoAddsDemand AS `КемОформлено`,
   1_Data.AdditionalInformation AS `ДополнительныеСведенья`

FROM `1_Data`
LEFT JOIN `1_Applicants` ON 1_Applicants.Index = 1_Data.IndexOfApplicant
LEFT JOIN `1_Addresses` AS `ЮА` ON ЮА.Index = 1_Applicants.IndexOfKeyAddress
LEFT JOIN `2_Сountries` AS `ЮАС` ON ЮАС.Index = `ЮА`.IndexOfСountry
LEFT JOIN `1_Addresses` AS `ФА` ON ФА.Index = 1_Applicants.IndexOfSecondAddress
LEFT JOIN `2_Сountries` AS `ФАС` ON ФАС.Index = `ФА`.IndexOfСountry
LEFT JOIN `2_PatternsOfOwnership` ON 2_PatternsOfOwnership.Index = 1_Applicants.IndexOfPatternOfOwnership
LEFT JOIN `2_Fairs` ON 2_Fairs.Index = 1_Data.IndexOfFair
LEFT JOIN `2_AdministrativeDistricts` ON 2_AdministrativeDistricts.Index = 2_Fairs.IndexOfAdministrativeDistrict

WHERE 2_PatternsOfOwnership.Abbreviation  = 'ФЛ'

ORDER BY `ФА_НазваниеСтраны`, `ФА_Region`



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Pena
Дата 16.3.2012, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



Если изменение коснулось кавычек и 66-ой сроки, то возвращается пустой результат =(

Это сообщение отредактировал(а) Pena - 16.3.2012, 17:24
--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
Pena
Дата 19.3.2012, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



Ужели нихто SQL не ведает? =(
--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
Akina
Дата 19.3.2012, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Структуры - особенно таблицы 2_PatternsOfOwnership - в студию.
А также - копию консоли с результатами выполнения запроса (в лог должны попасть и запрос, и результат) без WHERE.
В формате TXT, зазиповать и приложить к сообщению.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Pena
Дата 19.3.2012, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



Научился использовать консоль - благодарю)) Всплыли ошибки, ту что в архив приложил исправить не смог. Это как понимаю претензия на повторное включение таблицы (адресов), которая уже подключалась? Если так, то как же правильно дважды подключить (у цели может быть два адреса (физический и юридический) и данные о них берутся из одной таблицы адресов). 

з.ы. Самое "забавное", что без консоли ошибки не всплывают и сводная таблица выводится верно =\

Это сообщение отредактировал(а) Pena - 19.3.2012, 10:39

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Pena.sql.zip 36,97 Kb
--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
Akina
Дата 19.3.2012, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



1) Снимок - это самоотверженно, но нахрен никому не нужно.
Когда просят структуру - следует давать вывод SHOW CREATE TABLE с консоли.
2) В текстовом файле есть сообщение об ошибке:
Цитата

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'Сount
ry
   LEFT JOIN `1_Addresses` AS `ФА` ON `ФА`.Index = 1_Applicants.IndexOfS' at lin
e 59

Сообщение всегда указывает то место, откуда начинается ошибочный текст запроса.
В данном случае - по непонятной для меня причине имя поля IndexOfСountry разрублено на две части.
Первый совет - все имена таблиц и полей обрамить обратными кавычками, после чего повторить выполнение запроса в консоли.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Pena
Дата 19.3.2012, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



Кажется нашёл ошибку. Проблема была в кодировках. Перенабрал имена таблиц и колонок - заработало... не понял сути, но лан.  Akina, благодарю)

Это сообщение отредактировал(а) Pena - 19.3.2012, 14:48
--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.