Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT из 3 таблиц / 19 сообщений из 19, страница 1 из 1
14.06.2017, 13:33
    #39471488
Graf_Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
есть 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
14.06.2017, 13:43
    #39471499
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
Имеются записи:
amortizators
id name number1name1112name2223name3334name444
price
id name number1name1112name2223name5554name666
zakaz
id name number1name1112name3333name5554name777
Какой Вывод (без WHERE) Вы хотите получить?
...
Рейтинг: 0 / 0
14.06.2017, 14:17
    #39471527
Graf_Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
если я ищу 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
14.06.2017, 14:22
    #39471529
Graf_Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
добавил колонку STATUS в таблицы
...
Рейтинг: 0 / 0
14.06.2017, 15:09
    #39471569
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
А если только в первой и второй?
...
Рейтинг: 0 / 0
14.06.2017, 15:15
    #39471579
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
Но вообще влоб ежели, то

Код: 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
14.06.2017, 15:34
    #39471603
Graf_Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
супер, вроде то шо надо!!!
спасибо!
пошёл пробовать.....
...
Рейтинг: 0 / 0
29.08.2017, 23:48
    #39512506
Graf_Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
помогите решить такую проблемку, возникла в процессе тестирования

вот запрос, который с вашей помощью был сделан, и работает суперклассно! Но выяснилось что есть такие позиции в таблице 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
30.08.2017, 01:16
    #39512527
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
А если сначала все данные слить в одну таблицу, а потом уже работать с ней.
...
Рейтинг: 0 / 0
30.08.2017, 02:00
    #39512537
Graf_Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
дело в том что данные в таблицу price заливаются каждый день менеджером, и смешивать их со всем остальным(которое неизменно) на мой взгляд абсолютно неразумно, и структура таблиц абсолютно разная.... Вобщем - не вариант.
...
Рейтинг: 0 / 0
30.08.2017, 02:08
    #39512540
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
Исключительно для формирования нужной отчетности.
...
Рейтинг: 0 / 0
30.08.2017, 02:35
    #39512542
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
Создай временную таблицу со всеми уникальными number
А потом обычным JOIN делай нужные выборки.
...
Рейтинг: 0 / 0
30.08.2017, 02:54
    #39512543
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
Код: 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
30.08.2017, 12:22
    #39512713
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
Graf_VorontsovWHERE amortizators.number LIKE '%87501006%'
как вы жёстко с цифрами то
between там точно не прикрутить?
regexp быстрее не будет?
...
Рейтинг: 0 / 0
30.08.2017, 12:28
    #39512725
Graf_Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
tip78Graf_VorontsovWHERE amortizators.number LIKE '%87501006%'
как вы жёстко с цифрами то
between там точно не прикрутить?
regexp быстрее не будет?

нене, это просто номер для примера,там поисковый запрос подставляется
...
Рейтинг: 0 / 0
31.08.2017, 01:35
    #39513091
Graf_Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
не могу понять как мне всётаки этот UNION к моему случаю прикрутить
...
Рейтинг: 0 / 0
31.08.2017, 02:51
    #39513099
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
Если без подзапрос, без заполнения 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
31.08.2017, 02:57
    #39513100
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
Имена таблиц забыл вставить
Код: 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
01.09.2017, 00:07
    #39513745
Graf_Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT из 3 таблиц
посмотрим... получится ли....
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT из 3 таблиц / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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