powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / отсутсвующее значение
4 сообщений из 4, страница 1 из 1
отсутсвующее значение
    #38945449
woojin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет!
как в секции WHERE использовать отсутствующее значение?

есть 3-и вспомогательные таблицы, завязанные на 4-ю по полю (из неё и получаются данные)
при запросе в одной из 3-х таблиц может не быть значения, но в 2-х других они точно есть (хотя может быть и только в одной)

как правильно составить запрос, что бы он вернул данные основываясь на совпадениях из оставшихся 2-х таблиц (или одной), при этом в условии должны быть все (возможные) три значения из 3-х таблиц

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT
  t0.calc_value
FROM table0 AS t0
  LEFT JOIN table1 AS t1
    ON t0.calc_id = t1.calc_id
  LEFT JOIN table2 AS t2
    ON t0.calc_id = t2.calc_id
  LEFT JOIN table3 AS t3
    ON t0.calc_id = t3.calc_id
WHERE t0.published = 1
AND t1.shoppergroup_id = 7 # может отсутствовать
AND t2.category_id = 1 # может отсутствовать
AND t3.manufacturer_id = 22 # может отсутствовать
AND t0.value_mathop = "-%"



в table1 нет category_id равным 1, во всех остальных указанные ID есть, как при запросе пропустить отсутствующее значение, но основываясь на других вернуть данные из таблицы table0
...
Рейтинг: 0 / 0
отсутсвующее значение
    #38945516
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
woojinвсем привет!
как в секции WHERE использовать отсутствующее значение?

есть 3-и вспомогательные таблицы, завязанные на 4-ю по полю (из неё и получаются данные)
при запросе в одной из 3-х таблиц может не быть значения, но в 2-х других они точно есть (хотя может быть и только в одной)

как правильно составить запрос, что бы он вернул данные основываясь на совпадениях из оставшихся 2-х таблиц (или одной), при этом в условии должны быть все (возможные) три значения из 3-х таблиц

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT
  t0.calc_value
FROM table0 AS t0
  LEFT JOIN table1 AS t1
    ON t0.calc_id = t1.calc_id
  LEFT JOIN table2 AS t2
    ON t0.calc_id = t2.calc_id
  LEFT JOIN table3 AS t3
    ON t0.calc_id = t3.calc_id
WHERE t0.published = 1
AND t1.shoppergroup_id = 7 # может отсутствовать
AND t2.category_id = 1 # может отсутствовать
AND t3.manufacturer_id = 22 # может отсутствовать
AND t0.value_mathop = "-%"




в table1 нет category_id равным 1, во всех остальных указанные ID есть, как при запросе пропустить отсутствующее значение, но основываясь на других вернуть данные из таблицы table0


если вы используете некую таблицу в WHERE групе, то
вы убиваете LEFT и оно становится просто JOIN на нее.
т.е.

select *
from A
left join B -- де факто это просто JOIN здесь
on A.id = B.id
where B.name = 'zz'

что бы получился реальный ЛЕФТ ЖОИН надо
дополнительные условия ставитъ в ON группу:

select *
from A
left join B -- реальный LEFT JOIN здесъ
on A.id = B.id AND B.name = 'zz'
...
Рейтинг: 0 / 0
отсутсвующее значение
    #38945688
woojin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc, спасибо!
сделал так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT
  t0.calc_value,
  t0.id,
  t1.sid,
  t2.cid,
  t3.mid
FROM table0 AS t0
  LEFT JOIN table1 AS t1
    ON t0.calc_id = t1.calc_id
    AND t1.shoppergroup_id = 7 # может отсутствовать
  LEFT JOIN table2 AS t2
    ON t0.calc_id = t2.calc_id
    AND t2.category_id = 1 # может отсутствовать
  LEFT JOIN table3 AS t3
    ON t0.calc_id = t3.calc_id
    AND t3.manufacturer_id = 22 # может отсутствовать
WHERE t0.published = 1
AND t0.value_mathop = "-%"



вот что получается:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
calc_value	id	sid	cid	mid
5,0000		20	6	(null)	22
5,0000		2	(null)	(null)	(null)
10,0000		3	(null)	(null)	(null)
15,0000		4	(null)	(null)	(null)
20,0000		5	(null)	(null)	(null)
30,0000		6	(null)	(null)	(null)
50,0000		7	(null)	(null)	(null)
25,0000		8	(null)	(null)	(null)
45,0000		14	(null)	(null)	(null)
40,0000		13	(null)	(null)	(null)
35,0000		12	(null)	(null)	(null)
60,0000		15	(null)	(null)	(null)
10,0000		16	(null)	(null)	(null)
15,0000		18	(null)	(null)	22
10,0000		19	(null)	(null)	(null)
можно как то из этого на стадии запроса MySQL вычленить строку с самым большим количеством результатов, т.е. (именно в этом выводе) первую строку, с другими параметрами строка может быть третьей, пятой, пятнадцатой!
...
Рейтинг: 0 / 0
отсутсвующее значение
    #38945764
woojinможно как то из этого на стадии запроса MySQL вычленить строку с самым большим количеством результатов, т.е. (именно в этом выводе) первую строку, с другими параметрами строка может быть третьей, пятой, пятнадцатой!... ORDER BY ... LIMIT ... ?

Или как вариант: ссыло
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / отсутсвующее значение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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