powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT из 3 таблиц
19 сообщений из 19, страница 1 из 1
SELECT из 3 таблиц
    #39471488
Graf_Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 3 таблицы
1) amortizators (id, name, number)
2) price (id, name, number)
3) zakaz (id, name, number)

вот запрос на который меня хватило.... но он делает не то что хотелось бы

Код: plsql
1.
2.
3.
4.
SELECT * FROM amortizators 
            JOIN price ON price.number = amortizators.number 
            JOIN zakaz ON zakaz.number = price.number
            WHERE amortizators.number LIKE '%87501006%'



хочу чтоб из таблицы 1 выводились номера которых нет в 2 и 3 и при этом добавлять какую либо запись к этим номерам... например "ноль"
из таблицы 3 номера которых нет в таблице 2 и добавить запись "заказ"
из таблицы 2 номера которые есть в таблице 1 и добавить запись "наличие"
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39471499
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеются записи:
amortizators
id name number1name1112name2223name3334name444
price
id name number1name1112name2223name5554name666
zakaz
id name number1name1112name3333name5554name777
Какой Вывод (без WHERE) Вы хотите получить?
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39471527
Graf_Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если я ищу number 44(он есть только в первой таблице)
id name number status4 name4 44 0

если ищу номер 11 (он есть в первой и второй и третьей)
id name number status1 name1 11 наличие

если ищу номер 33 (он есть в первой и третьей)
id name number status2 name3 33 заказ
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39471529
Graf_Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добавил колонку STATUS в таблицы
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39471569
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если только в первой и второй?
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39471579
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но вообще влоб ежели, то

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT t1.id, t1.name, t1.number, 
CASE WHEN t2.number IS     NULL AND t3.number IS     NULL THEN '0'
     WHEN t2.number IS NOT NULL AND t3.number IS NOT NULL THEN 'наличие'
     WHEN t2.number IS     NULL AND t3.number IS NOT NULL THEN 'заказ'
     WHEN t2.number IS NOT NULL AND t3.number IS     NULL THEN 'что-то ещё'
     ELSE 'ваще чума'
END status
FROM amortizators t1
LEFT JOIN price t2 ON t1.number = t2.number 
LEFT JOIN zakaz t3 ON t1.number = t3.number
WHERE t1.number LIKE '%87501006%'
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39471603
Graf_Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
супер, вроде то шо надо!!!
спасибо!
пошёл пробовать.....
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39512506
Graf_Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите решить такую проблемку, возникла в процессе тестирования

вот запрос, который с вашей помощью был сделан, и работает суперклассно! Но выяснилось что есть такие позиции в таблице price(эта та таблица по которой пишется статус НАЛИЧИЕ) которых нет нигде больше, т.к. они сняты с производства(т.е. в каталоге amortizators и в zakaz они отсутствуют,но в наличии завалялись....) вобщем пролема как их оттуда достать если они есть только в таблице price

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT t1.marka_name, t1.model_name, t1.car_name, t1.correction, t1.search, t1.year, t1.range_type, t1.install, t1.art_number, t1.info, t1.info_lowering, t1.jpg, t1.pdf, 
                CASE WHEN t2.SIMPLE_NUMBER IS NULL AND t3.SIMPLE_NUMBER IS NULL THEN 'под запрос'
                     WHEN t2.SIMPLE_NUMBER IS NOT NULL AND t3.SIMPLE_NUMBER IS NOT NULL THEN 'наличие' 
                     WHEN t2.SIMPLE_NUMBER IS NULL AND t3.SIMPLE_NUMBER IS NOT NULL THEN 'заказ'
                     WHEN t2.SIMPLE_NUMBER IS NOT NULL AND t3.SIMPLE_NUMBER IS NULL THEN 'наличие'
                ELSE 'неправильный номер'
                END status,
                IF(t2.SIMPLE_NUMBER IS NOT NULL AND t3.SIMPLE_NUMBER IS NOT NULL 
                    OR t2.SIMPLE_NUMBER IS NOT NULL AND t3.SIMPLE_NUMBER IS NULL, t2.PRICE_EURO, t3.PRICE_EURO) AS PRICE_EURO    
            FROM amortizators t1
            LEFT JOIN price t2 ON t1.search = t2.SIMPLE_NUMBER 
            LEFT JOIN zakaz t3 ON t1.search = t3.SIMPLE_NUMBER
            WHERE t1.search LIKE '%8741144%'       
            LIMIT 100



пробовал после where добавить это
Код: sql
1.
OR t2.SIMPLE_NUMBER LIKE '%8741144%'


но не прокатило...

получается что надо сделать: если t1.search не найден, но надо поискать ещё t2.SIMPLE_NUMBER, но без JOIN , т.к. не к чему привязывать его
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39512527
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если сначала все данные слить в одну таблицу, а потом уже работать с ней.
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39512537
Graf_Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дело в том что данные в таблицу price заливаются каждый день менеджером, и смешивать их со всем остальным(которое неизменно) на мой взгляд абсолютно неразумно, и структура таблиц абсолютно разная.... Вобщем - не вариант.
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39512540
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исключительно для формирования нужной отчетности.
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39512542
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создай временную таблицу со всеми уникальными number
А потом обычным JOIN делай нужные выборки.
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39512543
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
SELECT DISTINCT number FROM  amortizators 
UNION 
SELECT DISTINCT number FROM  price 
UNION 
SELECT DISTINCT number FROM  zakaz
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39512713
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Graf_VorontsovWHERE amortizators.number LIKE '%87501006%'
как вы жёстко с цифрами то
between там точно не прикрутить?
regexp быстрее не будет?
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39512725
Graf_Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78Graf_VorontsovWHERE amortizators.number LIKE '%87501006%'
как вы жёстко с цифрами то
between там точно не прикрутить?
regexp быстрее не будет?

нене, это просто номер для примера,там поисковый запрос подставляется
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39513091
Graf_Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не могу понять как мне всётаки этот UNION к моему случаю прикрутить
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39513099
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если без подзапрос, без заполнения NUL и без учета твоего синтаксиса.
То примерно вот так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT DISTINCT number FROM  amortizators 
UNION 
SELECT DISTINCT number FROM  price 
UNION 
SELECT DISTINCT number FROM  zakaz
INTO TABLE NUM

SELECT NUM.number,;
 amortizators.id AS id_A,    name AS name_A,;
        price.id AS price_P, name AS price_P,;
        zakaz.id AS id_Z,    name AS name_Z,;
FROM NUM, amortizators, price, zakaz; 
LEFT JOIN NUM amortizators ON NUM.number = amortizators.number 
LEFT JOIN NUM price ON NUM.number = price.number
LEFT JOIN NUM zakaz ON NUM.number = zakaz.number 



Другое дело, что надо понять структуру нужной тебе выходной таблицы.
+ необходимость выборки всего или по условию.

Если тебе нужен только один из number-ов, то все можно сделать гораздо быстрее.
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39513100
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имена таблиц забыл вставить
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT DISTINCT number FROM  amortizators 
UNION 
SELECT DISTINCT number FROM  price 
UNION 
SELECT DISTINCT number FROM  zakaz
INTO TABLE NUM

SELECT NUM.number,;
 amortizators.id AS id_A, amortizators.name AS name_A,;
        price.id AS price_P,     price.name AS price_P,;
        zakaz.id AS id_Z,        zakaz.name AS name_Z,;
FROM NUM, amortizators, price, zakaz; 
LEFT JOIN NUM amortizators ON NUM.number = amortizators.number 
LEFT JOIN NUM price ON NUM.number = price.number
LEFT JOIN NUM zakaz ON NUM.number = zakaz.number 
...
Рейтинг: 0 / 0
SELECT из 3 таблиц
    #39513745
Graf_Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
посмотрим... получится ли....
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT из 3 таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]