Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> DISTINCT и сложный запрос
Gansik  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 9
Пользователь №: 30571
На форуме: 5 лет, 15 дней
Карма:




Добрый вечер. Имеется вот такой сложный запрос:


SET @NUMBER = '1244211212';
SET @BRAND = 'MERCEDES-BENZ';

SELECT DISTINCT
IF
(ART_LOOKUP2.ARL_KIND = 3, BRANDS2.BRA_BRAND, SUPPLIERS2.SUP_BRAND) AS BRAND,
IF (ART_LOOKUP2.ARL_KIND IN (2, 3), ART_LOOKUP2.ARL_DISPLAY_NR, ARTICLES2.ART_ARTICLE_NR) AS NUMBER,
ART_LOOKUP2.ARL_KIND
FROM
ART_LOOKUP
LEFT JOIN BRANDS ON BRANDS.BRA_ID = ART_LOOKUP.ARL_BRA_ID
INNER JOIN ARTICLES ON ARTICLES.ART_ID = ART_LOOKUP.ARL_ART_ID
INNER JOIN SUPPLIERS ON SUPPLIERS.SUP_ID = ARTICLES.ART_SUP_ID
INNER JOIN ART_LOOKUP AS ART_LOOKUP2 FORCE KEY (PRIMARY) ON ART_LOOKUP2.ARL_ART_ID = ART_LOOKUP.ARL_ART_ID
LEFT JOIN BRANDS AS BRANDS2 ON BRANDS2.BRA_ID = ART_LOOKUP2.ARL_BRA_ID
INNER JOIN ARTICLES AS ARTICLES2 ON ARTICLES2.ART_ID = ART_LOOKUP2.ARL_ART_ID
INNER JOIN SUPPLIERS AS SUPPLIERS2 FORCE KEY (PRIMARY) ON SUPPLIERS2.SUP_ID = ARTICLES2.ART_SUP_ID
WHERE
ART_LOOKUP.ARL_SEARCH_NUMBER = @NUMBER AND
(ART_LOOKUP.ARL_KIND IN (3, 4) AND BRANDS.BRA_BRAND = @BRAND OR
SUPPLIERS.SUP_BRAND = @BRAND) AND
(ART_LOOKUP.ARL_KIND, ART_LOOKUP2.ARL_KIND) IN
((1, 1), (1, 2), (1, 3),
(
2, 1), (2, 2), (2, 3),
(
3, 1), (3, 2), (3, 3),
(
4, 1))
ORDER BY
BRAND,
NUMBER
;

Все работает нормально, но есть одно но. К выбираемым полям мне нужно добавить еще одно поле ARL_ART_ID из таблицы ART_LOOKUP. Не могу побороть эту проблему. Если в запросе добавить примерно так:
SELECT DISTINCT
IF
(ART_LOOKUP2.ARL_KIND = 3, BRANDS2.BRA_BRAND, SUPPLIERS2.SUP_BRAND) AS BRAND,
IF (ART_LOOKUP2.ARL_KIND IN (2, 3), ART_LOOKUP2.ARL_DISPLAY_NR, ARTICLES2.ART_ARTICLE_NR) AS NUMBER,
ART_LOOKUP2.ARL_KIND,
ART_LOOKUP2.ARL_ART_ID AS PID,
FROM...

То тогда перестает работать SELECT DISTINCT, и я получаю много лишних (одинаковых) записей :(
Как правильно составить запрос?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25994
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 25 дней
Карма: 725

Не курю:
1 год, 2 месяца, 11 дней


Цитата
К выбираемым полям мне нужно добавить еще одно поле ARL_ART_ID из таблицы ART_LOOKUP


по условию или как?

вообще скорее тебе придётся в краце рассказать - что за цель выборки, что за таблицы и что за поля. так - пальцем в небо.


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Gansik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 9
Пользователь №: 30571
На форуме: 5 лет, 15 дней
Карма:




Если коротко, то это каталог автозапчастей, а этот запрос делает:

Поиск аналогов (оригинальных/неоригинальных/торговых) к любому заданному номеру (оригинальному/неоригинальному/торговому)
BRAND - Название производителя изделия
NUMBER - Номер изделия
ARL_KIND - Тип номера изделия: 1 - Неоригинальный, 2 - Торговый, 3 - Оригинальный

вот на выходе я хочу получить еще и ARL_ART_ID позиции.
Могу скинуть структуру таблиц
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25994
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 25 дней
Карма: 725

Не курю:
1 год, 2 месяца, 11 дней


в смс - наверху сержиус сидит - к нему обратись.


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Gansik  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 9
Пользователь №: 30571
На форуме: 5 лет, 15 дней
Карма:




Структура
-- Table structure for table `ARTICLES`
--

DROP TABLE IF EXISTS `ARTICLES`;
CREATE TABLE `ARTICLES` (
`ART_ID` int(11) NOT NULL,
`ART_ARTICLE_NR` varchar(66) NOT NULL,
`ART_SUP_ID` smallint(6) default NULL,
`ART_DES_ID` int(11) default NULL,
`ART_COMPLETE_DES_ID` int(11) default NULL,
`ART_CTM` binary(252) default NULL,
`ART_PACK_SELFSERVICE` smallint(6) default NULL,
`ART_MATERIAL_MARK` smallint(6) default NULL,
`ART_REPLACEMENT` smallint(6) default NULL,
`ART_ACCESSORY` smallint(6) default NULL,
`ART_BATCH_SIZE1` int(11) default NULL,
`ART_BATCH_SIZE2` int(11) default NULL,
PRIMARY KEY (`ART_ID`),
KEY `ART_ARTICLE_NR` (`ART_ARTICLE_NR`(10))
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;


Table structure for table `ART_LOOKUP`
--

DROP TABLE IF EXISTS `ART_LOOKUP`;
CREATE TABLE `ART_LOOKUP` (
`ARL_ART_ID` int(11) NOT NULL default '0',
`ARL_SEARCH_NUMBER` varchar(105) NOT NULL default '',
`ARL_KIND` binary(1) NOT NULL default '\0',
`ARL_CTM` binary(252) default NULL,
`ARL_BRA_ID` smallint(6) NOT NULL default '0',
`ARL_DISPLAY_NR` varchar(105) NOT NULL default '',
`ARL_DISPLAY` smallint(6) NOT NULL default '0',
`ARL_BLOCK` smallint(6) NOT NULL default '0',
`ARL_SORT` smallint(6) NOT NULL default '0',
PRIMARY KEY (`ARL_ART_ID`,`ARL_SEARCH_NUMBER`,`ARL_KIND`,`ARL_BRA_ID`,`ARL_DISPLAY_NR`,`ARL_DISPLAY`,`ARL_BLOCK`,`ARL_SORT`),
KEY `ARL_SEARCH_NUMBER` (`ARL_SEARCH_NUMBER`(10),`ARL_BRA_ID`,`ARL_KIND`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
Table structure for table `BRANDS`
--

DROP TABLE IF EXISTS `BRANDS`;
CREATE TABLE `BRANDS` (
`BRA_ID` smallint(6) NOT NULL,
`BRA_MFC_CODE` varchar(60) default NULL,
`BRA_BRAND` varchar(60) default NULL,
`BRA_MF_NR` int(11) default NULL,
PRIMARY KEY (`BRA_ID`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8


-- Table structure for table `SUPPLIERS`
--

DROP TABLE IF EXISTS `SUPPLIERS`;
CREATE TABLE `SUPPLIERS` (
`SUP_ID` smallint(6) NOT NULL,
`SUP_BRAND` varchar(60) default NULL,
`SUP_SUPPLIER_NR` smallint(6) default NULL,
`SUP_COU_ID` smallint(6) default NULL,
`SUP_IS_HESS` smallint(6) default NULL,
PRIMARY KEY (`SUP_ID`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14978
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 3 дня
Карма: 444




Мне прямо предложили помочь в этой теме... Но я, честно говоря, в Мускуле сложные запросы не делал. А Постгре сильно отличается от Мускуля, когда начинаются всякие "навороты" с группировками и/или джойнами.
Я уже несколько раз "накалывался" с этим. Смотрю с точки зрения Постгре на Мускульный запрос - и оказываюсь не прав.

Так что "экскузи муа"... В данном случае не подскажу.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25994
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 25 дней
Карма: 725

Не курю:
1 год, 2 месяца, 11 дней


может вообще работать с хранимыми процедурами ... CREATE VIEW


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_Владимир  
[x] Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата
То тогда перестает работать SELECT DISTINCT, и я получаю много лишних (одинаковых) записей sad.gif


Записей конечно больше, но они не одинаковые wink.gif


"BRAND";"NUMBER";"HEX(ARL_KIND)";"PID"
"COMLINE";"ADC1620";"31";"2863578"
"FEBI BILSTEIN";"08542";"31";"1774173"
"MERCEDES-BENZ";"124 421 12 12";"33";"1774173"
"MERCEDES-BENZ";"124 421 12 12";"33";"2002984"
"MERCEDES-BENZ";"124 421 12 12";"33";"2094360"
"MERCEDES-BENZ";"124 421 12 12";"33";"2667981"
"MERCEDES-BENZ";"124 421 1212";"33";"1718447"
"MERCEDES-BENZ";"124 421 13 12";"33";"1774173"
"MERCEDES-BENZ";"124 421 13 12";"33";"2002984"
"MERCEDES-BENZ";"124 421 13 12";"33";"2094360"
"MERCEDES-BENZ";"124 421 13 12";"33";"2667981"
"MERCEDES-BENZ";"124 421 1312";"33";"1718447"
"MERCEDES-BENZ";"1244211212";"33";"930244"
"MERCEDES-BENZ";"1244211212";"33";"930245"
"MERCEDES-BENZ";"1244211212";"33";"1229374"
"MERCEDES-BENZ";"1244211212";"33";"1229375"
"MERCEDES-BENZ";"1244211212";"33";"1590658"
"MERCEDES-BENZ";"1244211212";"33";"2667981"
"MERCEDES-BENZ";"1244211212";"33";"2863578"
"MERCEDES-BENZ";"1244211312";"33";"930244"
"MERCEDES-BENZ";"1244211312";"33";"930245"
"MERCEDES-BENZ";"1244211312";"33";"1229374"
"MERCEDES-BENZ";"1244211312";"33";"1229375"
"MERCEDES-BENZ";"1244211312";"33";"1590658"
"MERCEDES-BENZ";"1244211312";"33";"2667981"
"MERCEDES-BENZ";"1244211312";"33";"2863578"
"METZGER";"10278 E";"31";"1718447"
"MINTEX";"98200 0318";"32";"1590658"
"MINTEX";"MDC362";"31";"1590658"
"PAGID";"52107";"31";"930244"
"PAGID";"52107PRO";"31";"930245"
"PAGID";"98200 0318";"32";"930244"
"PAGID";"98200 0318";"32";"930245"
"SWAG";"10 90 8542";"31";"2002984"
"TEMPLIN";"01.01.42.104011";"31";"2667981"
"TEXTAR";"92031800";"31";"1229374"
"TEXTAR";"92031803";"31";"1229375"
"TEXTAR";"98200 0318";"32";"1229374"
"TEXTAR";"98200 0318";"32";"1229375"
"TEXTAR";"98200 0318 0 1";"32";"1229374"
"TEXTAR";"98200 0318 0 1";"32";"1229375"
"VAICO";"V30-40010";"31";"2094360"
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
vlozovoy  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата
То тогда перестает работать SELECT DISTINCT, и я получаю много лишних (одинаковых) записей sad.gif
Как правильно составить запрос?


Так какой хотелось бы получить результат? Если исходить из того, что одинаковых записей в ответе нет.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
koluha  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 1
Пользователь №: 41996
На форуме: 1 год, 1 месяц, 18 дней
Карма:




Ребят, объясните мне из большого запроса что писал автор темы, вот это строку:
INNER JOIN ART_LOOKUP AS ART_LOOKUP2 FORCE KEY (PRIMARY) ON ART_LOOKUP2.ARL_ART_ID = ART_LOOKUP.ARL_ART_ID
а именно как вы сделали поле ARL_ART_ID PRIMARY? если в этом поле есть повторяюшие записи? спасибо
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса