Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с подзапросом / 14 сообщений из 14, страница 1 из 1
19.03.2014, 15:23:41
    #38590753
100пор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
Table
id,nm,pr
1,Вася,Иванов
2,Федя,Сумкин
3,Петя,Иванов

Когда я ищу по значению 'Вася'
Мне должно выдать
1,Вася,Иванов
и далее по фамилии Иванов все что есть
3,Петя,Иванов

Итого:
1,Вася,Иванов
3,Петя,Иванов

мне нужен способ без Union! я хочу значения, которые были по Фамилии закрасить у себя в таблице другим цветом, для этого в Select можно просто выводить дополнительно столбец к примеру '1'
...
Рейтинг: 0 / 0
19.03.2014, 15:33:56
    #38590775
Диклевич Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
Код: sql
1.
SELECT t.* FROM Table t WHERE t.pr IN (SELECT u.pr FROM Table u WHERE u.nm = 'Вася')



Код: sql
1.
SELECT t.* FROM Table t WHERE EXISTS(SELECT u.* FROM Table u WHERE u.nm = 'Вася' AND u.pr = t.pr)



только если будет 4 Вася Петров, и другие Петровы, то запрос выведет и Ивановых и Петровых.
...
Рейтинг: 0 / 0
19.03.2014, 15:53:10
    #38590818
100пор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
Диклевич Александр,
спасибо, работает
у меня был вариант с IN(), но в IN вроде можно только один столбец вроде
попробывал вариант с Exists
как мне передать в выборку виртуальный столбец с пометкой 1, там где выборка была по Фамилии

Итог (типо такого):
1,Вася,Иванов,0
3,Петя,Иванов,1
...
Рейтинг: 0 / 0
19.03.2014, 15:58:54
    #38590829
Диклевич Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
100пор,

Код: sql
1.
SELECT t.*, CASE WHEN t.nm = 'Вася' THEN 0 ELSE 1 END AS `note` FROM Table t WHERE EXISTS(SELECT u.* FROM Table u WHERE u.nm = 'Вася' AND u.pr = t.pr)
...
Рейтинг: 0 / 0
19.03.2014, 16:05:07
    #38590841
Диклевич Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
Диклевич Александр,

хотя, в MySQL можно и так:
Код: sql
1.
SELECT t.*, t.nm = 'Вася' AS `note` FROM Table t WHERE EXISTS(SELECT u.* FROM Table u WHERE u.nm = 'Вася' AND u.pr = t.pr)


но это дело вкуса.
...
Рейтинг: 0 / 0
19.03.2014, 16:13:20
    #38590861
100пор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
Диклевич Александр,
спасибо за помощь, все заработало!
...
Рейтинг: 0 / 0
19.03.2014, 17:07:34
    #38590979
100пор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
Код: plsql
1.
2.
SELECT t.nm,t.pr,CASE WHEN t.nm = 'Вася' THEN 0 ELSE 1 END AS `note` (SELECT Table.nm,Table.pr
FROM Table INNER JOIN vid ON Table.id = vid.idTable) t WHERE EXISTS(SELECT u.* FROM Table u WHERE u.nm = 'Вася' AND u.pr = t.pr);


подскажите, а если у меня JOIN, более элегантного способа нету?
как видим я делаю временную таблицу для FROM, и выбираю Select-ом уже из временной таблицы данные
...
Рейтинг: 0 / 0
19.03.2014, 17:15:37
    #38590996
100пор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
ой, можно же не делать псевдоним для первой таблицы `t`, а просо указывать ее в запросе EXISTS
...
Рейтинг: 0 / 0
19.03.2014, 18:24:31
    #38591082
100пор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
При таком раскладе:
Table
id,nm,pr
1,Вася,Иванов
2,Федя,Сумкин
3,Петя,Иванов
4,Вася,ИвановНомерДва
5,Аноним,ИвановНомерДва

Когда ищем 'Вася' получаем:
1,Вася,Иванов
3,Петя,Иванов
4,Вася,ИвановНомерДва
5,Аноним,ИвановНомерДва

НО, очень долго обрабатывается запрос! Подскажите, как ускорить выборку
...
Рейтинг: 0 / 0
19.03.2014, 20:36:23
    #38591208
Диклевич Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
100пор,

так индексы же.
есть какие?
можно добавить составной на Table для nm, pr.
можно по отдельности на каждый.
...
Рейтинг: 0 / 0
20.03.2014, 06:45:40
    #38591390
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
Диклевич Александрможно добавить составной на Table для nm, pr.никакого смысла, если нужен поиск по pr
лучше уж 2 отдельных индекса
И вообще, почему ТСу обязательно100порнужен способ без Union!?
...
Рейтинг: 0 / 0
20.03.2014, 13:14:29
    #38591766
Диклевич Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
tanglir,

ну не только по pr, там и nm участвует.
...
Рейтинг: 0 / 0
20.03.2014, 13:37:57
    #38591814
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
Диклевич Александр, вот именно

2 индекса (pr) и (nm) позволят "быстро искать" и по тому, и по другому отдельно
один индекс - в любом порядке - позволит делать это только по первому своему полю
...
Рейтинг: 0 / 0
20.03.2014, 16:37:27
    #38592095
100пор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом
я все сделал при помощи JOIN
индекс пока только по id и nm
все летает
всем спасибо
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с подзапросом / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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