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

1 2 3 4 5
x x x x
x x x x
x x
x x x

чтобы выбрались только 1 3 4 5 столбцы

1 3 4 5
x x x x
x x x x
x x
x x x
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756091
ShutTap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1 2 3 4 5
x _ x x x
x _ x x x
x _ x _ _
x _ x x _

чтобы выбрались только 1 3 4 5 столбцы

1 3 4 5
x x x x
x x x x
x x _ _
x x x _
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756120
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никак
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756130
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну почему никак, можно, только в хранимке
ну и это будет через анус
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756145
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, ну да, сначала вытащим все поля из инфо_схема, потом выберем те, по которым мин/макс не нулл, потом соберём текст запроса только с ними, выполним и отдадим результат
...
кто ж спорит, можно и так
но я такого изврата советовать не хочу
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756191
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShutTapЗдравствуйте.
Подскажите пожалуйста, как можно сделать следующее:
выбирать из таблицы только те указанные столбцы, в которых хоть в одной строке есть какое-то значение?


Это проще паренной репы!! Вот тестовый пример:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
drop table a3;
create table a3 (a int, b int, c int);
insert into a3 values (1, 0, 1)
, (1, 0, 0)
, (1, 0, 1);

SET @c1 = if ((select count(*) from a3 where a != 0), 'a', null);
SET @c2 = if ((select count(*) from a3 where b != 0), 'b', null);
SET @c3 = if ((select count(*) from a3 where c != 0), 'c', null);
SET @q = concat('select ', concat_ws(',', @c1, @c2, @c3), ' from a3');
prepare act from @q;
execute act;
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756193
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShutTapЗдравствуйте.
Подскажите пожалуйста, как можно сделать следующее:
выбирать из таблицы только те указанные столбцы, в которых хоть в одной строке есть какое-то значение?

1 2 3 4 5
x x x x
x x x x
x x
x x x

чтобы выбрались только 1 3 4 5 столбцы

1 3 4 5
x x x x
x x x x
x x
x x x

вопрос зачем?

вот проведем аналогию.

строки - это порции данных, скажем записи в картотеке гаи
марка - мерседес
модель - ххх
год -1999
кузов - 23123
....
ГБО(газ) -
последнее дтп -


ну тоесть не все поля заполнены.

вот зачем делая в запрос гаи, говорить - дайте мне карточки машин зелёных 1998 года выпуска, только если какоето поле во всех машинах отсутсвует, разреште ножницами карточки на кусочки, и слепите обратно чтоб было уже без этого поля.

тебе что мешает смотреть эти карточки и нету значения, ну значит нету.

я практически даже не могу придумать задачу, чтобы для меня было важно

поле1 - скажем на 1000 записей пустое, а 1001 заполненое
а поле2 на все 1001 запись пустое.
вот какая задача требует исключить это поле2 из выборки???
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756347
ShutTap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что-то вроде:
на витрине магазина разложены продукты и ценники к ним.
Когда продукты заканчиваются, соответствующий ценник убирают.
То есть, и полка пуста, и ценника нет, а не просто мы можем смотреть или не смотреть на пустую полку...
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756358
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShutTapчто-то вроде:
на витрине магазина разложены продукты и ценники к ним.
Когда продукты заканчиваются, соответствующий ценник убирают.
То есть, и полка пуста, и ценника нет, а не просто мы можем смотреть или не смотреть на пустую полку...
Пустую полку при этом выносят из магазина и прячут на складе?
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756361
ShutTap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
образно говоря. полки без ценника - не существует :)
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756362
ShutTap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пускай не полка в магазине. пускай выставочный стенд. выставочный стенд - прячут
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756766
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShutTapпускай не полка в магазине. пускай выставочный стенд. выставочный стенд - прячут

плохая аналогия. моя точнее.

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

ЗЫ
если сильно хочеться для запроса

select a,b,c,d,e,... from table where <clause>
узнать какие столбики всегда пустые

делай предварительно запрос

select sum(IF(a,1,0)) as 'not_empty_a',sum(IF(b,1,0)) as 'not_empty_b',...
from table where <clause>

и потом посмотриш - где сумма 0, там и тот столбик что надо исключить
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756767
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и чего только не сделаешь для человека....:)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select scanner_guid,email,country,
	(@total := @total +
	(
		(@scanner_guid:=@scanner_guid + IF(scanner_guid <> '',1,0)) +
		(@email:=@email + IF(email <> '',1,0)) +
		(@country:=@country + IF(country is not null,1,0))
	) * 0  + 1)
from user_data,(select @scanner_guid:=0,@email:=0,@country:=0,@total:=0) a
where id between 20 and 31

UNION ALL
select @scanner_guid,@email,@country,@total



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
"scanner_guid","email","country","(@total := @total +
	(
		(@scanner_guid:=@scanner_guid + IF(scanner_guid <> '',1,0)) +
		(@email:=@email + IF(email <> '',1,0)) +
		(@country:=@country + IF(country is not null,1,0))
	) * 0  + 1)"
"","email1",\N,"1"
"","email2","RU","2"
"0","2","1","2"

...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38756952
ShutTap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ничего себе... буду разбираться, спасибо...
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38757081
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShutTapНичего себе... буду разбираться, спасибо...

суть в том, что

сначала отработает запрос(без переменных...то что с @)
потом посути база начнёт выдавать данные и вот тут начнут работать переменные.
вначале все они равны нулю
@email := @email + IF(email<>"",1,0) - тоесть на каждой строчке, где мыло не пустая строка, переменная будет увеличиваться на еденицу, если пустая останеться прежней...если на всех записях будет путое мыло, то переменная так и останеться нулём.
аналогично другие. переменная тотал введен уже для понта - подщитает общее число записей в результате.

Код: plaintext
1.
2.
3.
"","email1",\N,"1"
"","email2","RU","2"
"0","2","1","2"

последняя строка - сканер гуид 0 раз не пустой
мыло 2 раза не путое, страна 1 раз не нул, всего две строки в результате.
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38757096
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453,

Мне кажется или вы просто эмулировали функцию COUNT(поле) ?
И не совсем понял, чем поможет ТС этот запрос, если изначально он хотел запрос с переменным количеством полей в результате?
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38758050
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftalex564657498765453,

Мне кажется или вы просто эмулировали функцию COUNT(поле) ?
И не совсем понял, чем поможет ТС этот запрос, если изначально он хотел запрос с переменным количеством полей в результате?

ну не совсем имитация. подщёт переменными, типо если не хочеться делать два запроса(первый мой вариант ТСу)

чем поможет - ну ТС так упорно хотел знать какие столбцы лишние, что я понял, что
его не прикалывает в выборке бежать по масиву и самому вычислять эти самые столбцы.
он хочет чтобы именно база проделала эту работу.

а вообще вцелом. мне когда идёя стукнула переменными посчитать какие столбцы пустые,
...видишь там разница во времени невилика в постах. Тыж не думаешь что я так быстро код
написал.я ради своего спортивного интереса решил попробовать... получилось. не пропадать
же добру, тем более что ТС очень просил чтобы база эту работу проделала.
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38758058
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453чем поможет - ну ТС так упорно хотел знать какие столбцы лишние, что я понял, что
его не прикалывает в выборке бежать по масиву и самому вычислять эти самые столбцы.
он хочет чтобы именно база проделала эту работу.Ну тогда можно попроще:
Код: sql
1.
2.
3.
4.
SELECT
  EXISTS (SELECT NULL FROM mytable WHERE field1 IS NOT NULL) field1_not_empty,
  EXISTS (SELECT NULL FROM mytable WHERE field2 IS NOT NULL) field2_not_empty,
  EXISTS (SELECT NULL FROM mytable WHERE field3 IS NOT NULL) field3_not_empty

По тем полям, на которые есть индексы, отработает очень быстро.
По тем полям, на которые индексов нет, отработает в зависимости от данных, но, скорее всего, быстрее полного перебора.
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38758064
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftНу тогда можно попроще:
Код: sql
1.
2.
3.
4.
SELECT
  EXISTS (SELECT NULL FROM mytable WHERE field1 IS NOT NULL) field1_not_empty,
  EXISTS (SELECT NULL FROM mytable WHERE field2 IS NOT NULL) field2_not_empty,
  EXISTS (SELECT NULL FROM mytable WHERE field3 IS NOT NULL) field3_not_empty

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


вопрос не по основной теме, а конкретно из этого примера
в чем разница между??:

Код: sql
1.
exists (select * from ...) vs exists (select null from)



наверное второй по скорости сильно быстрее??
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38758069
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixвопрос не по основной теме, а конкретно из этого примера
в чем разница между??:

Код: sql
1.
exists (select * from ...) vs exists (select null from)




наверное второй по скорости сильно быстрее??Я уже не помню откуда у меня это повелось и даже не помню из какой СУБД. Был такой эффект, что фрагмент (select * ...) реально выбирал все поля, что резко снижало производительность.
А константа (например, число 1) не используется, т.к. NULL требует чуть меньше памяти во внутренних структурах памяти. Хотя это вряд ли поддается измерению и, скорее всего, уже устарело, в голове остался шаблон писать именно так.
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38758078
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

Судя по http://dev.mysql.com/doc/refman/4.1/en/exists-and-not-exists-subqueries.html MySQL ignores the SELECT list in such a subquery, so it makes no difference.мой шаблон в голове все-таки имеет происхождение не из MySQL.
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38758091
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftLumix,

Судя по http://dev.mysql.com/doc/refman/4.1/en/exists-and-not-exists-subqueries.html MySQL ignores the SELECT list in such a subquery, so it makes no difference.мой шаблон в голове все-таки имеет происхождение не из MySQL.

благодарю за шикарное пояснение!!
...
Рейтинг: 0 / 0
Выбор только непустых столбцов.
    #38758339
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftalex564657498765453чем поможет - ну ТС так упорно хотел знать какие столбцы лишние, что я понял, что
его не прикалывает в выборке бежать по масиву и самому вычислять эти самые столбцы.
он хочет чтобы именно база проделала эту работу.Ну тогда можно попроще:
Код: sql
1.
2.
3.
4.
SELECT
  EXISTS (SELECT NULL FROM mytable WHERE field1 IS NOT NULL) field1_not_empty,
  EXISTS (SELECT NULL FROM mytable WHERE field2 IS NOT NULL) field2_not_empty,
  EXISTS (SELECT NULL FROM mytable WHERE field3 IS NOT NULL) field3_not_empty

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

нет не проще.

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

и переменные я взял, дабы не делать второго запроса. хотя для индексного поля возможно
будет быстрее всётаки сделать вложеный запрос....

хотя помниться сдесь на форуме мы сталкивались с тиуацией похожей и ктото писал

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


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