Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка значений одного поля одной таблицы при двух условиях / 15 сообщений из 15, страница 1 из 1
31.01.2017, 11:55
    #39395311
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
Есть два запроса к одной таблице, отличающихся одним условием:
Код: sql
1.
SELECT f3,f4,f12 FROM t t1 WHERE f2=10 AND f5=0


Код: sql
1.
SELECT f3,f4,f12 FROM t t2 WHERE f2=10 AND f5=1


Возможно ли их так объединить, чтобы получить такой результат в одном запросе, схематично:
Код: sql
1.
SELECT f3,f4,t1.f12,t2.f12 FROM t WHERE f2=10 AND f5=(0 and 1)


- f3, f4 одинаковы для обоих выборок,
- f3,f4,f12 для условия (f2=10 AND f5=0) всегда существует, но для условия (f2=10 AND f5=1) может отсутствовать, тогда t2.f12 должно быть NULL.
Помогите, пожалуйста, с запросом.
...
Рейтинг: 0 / 0
31.01.2017, 13:07
    #39395402
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
Код: sql
1.
2.
3.
4.
SELECT 
  F5, -- ВАЖНО!
 f3,f4,t1.f12,t2.f12 
FROM t WHERE f2=10 AND f5 in (0, 1)



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

Задача очень неопределенная.
Возможно, нужно так:
Код: sql
1.
2.
3.
SELECT t1.f3, t1.f4, t1.f12, t2.f12
FROM t t1, t t2
WHERE t1.f3=t2.f4 AND t1.f4=t2.f4 AND t1.f2=10 AND t1.f5=0 AND t2.f2=10 AND t2.f5=1
...
Рейтинг: 0 / 0
31.01.2017, 13:22
    #39395423
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
miksoft,
Спасибо за помощь! Видимо, с описанием задачи намудрил все же, т.к. Ваш запрос не дает результата.
Но я решил самостоятельно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT t1.f3,t1.f4,t1.f12,t2.f12
FROM 
    (SELECT f3,f4,f12 FROM t WHERE f2=10 AND f5=0) t1
LEFT JOIN
    (SELECT f3,f4,f12 FROM t WHERE f2=10 AND f5=1) t2
ON
    t1.f3=t2.f3 AND t1.f4=t2.f4


Выдает то, что надо. Но, может, эту конструкцию можно упростить?
...
Рейтинг: 0 / 0
31.01.2017, 13:34
    #39395435
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
Должно подойти такое непотребство:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
  f3
, f4
, MAX(CASE f5 WHEN 0 THEN f12 END) f12_0
, MAX(CASE f5 WHEN 1 THEN f12 END) f12_1
FROM t
WHERE f2=10
GROUP BY
  f3
, f4


Однако оно строится на неподтверждённых предположениях, что группы (f3, f4, f5 IN (0,1)) уникальны.

С учётом озвученного также неплохо (и с теми же предположениями) смотрится
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
  t1.f3
, t1.f4
, t1.f12 f12_0
, t2.f12 f12_1
FROM t t1
LEFT JOIN t t2
  ON t1.f3=t2.f3 
 AND t1.f4=t2.f4
 AND t1.f5=0
 AND t2.f5=1
...
Рейтинг: 0 / 0
31.01.2017, 13:48
    #39395454
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
Akina,

1-й вариант запроса отрабатывает как нужно, а вот 2-й прервал после минуты выполнения запроса.
...
Рейтинг: 0 / 0
31.01.2017, 13:48
    #39395456
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
LiYing2-й прервал после минуты выполнения запроса.Индексов подходящих нехватает, небось...
...
Рейтинг: 0 / 0
31.01.2017, 21:24
    #39395874
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
LiYingmiksoft,
Спасибо за помощь! Видимо, с описанием задачи намудрил все же, т.к. Ваш запрос не дает результата.
Но я решил самостоятельно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT t1.f3,t1.f4,t1.f12,t2.f12
FROM 
    (SELECT f3,f4,f12 FROM t WHERE f2=10 AND f5=0) t1
LEFT JOIN
    (SELECT f3,f4,f12 FROM t WHERE f2=10 AND f5=1) t2
ON
    t1.f3=t2.f3 AND t1.f4=t2.f4



Выдает то, что надо. Но, может, эту конструкцию можно упростить?
Код: sql
1.
2.
3.
SELECT t1.f3, t1.f4, t1.f12, t2.f12
FROM t t1 LEFT JOIN t t2 ON t1.f3=t2.f4 AND t1.f4=t2.f4
WHERE t1.f2=10 AND t1.f5=0 AND t2.f2=10 AND t2.f5=1

Но это уже не то, что спрашивалось в изначальном вопросе.
...
Рейтинг: 0 / 0
01.02.2017, 08:38
    #39395996
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
miksoft,

как всегда, огромное спасибо за помощь!
В последнем запросе у Вас вкралась опечатка, правильно так: ... ON t1.f3=t2.f3 AND ...
...
Рейтинг: 0 / 0
01.02.2017, 10:13
    #39396064
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
miksoftLiYingmiksoft,
Но я решил самостоятельно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT t1.f3,t1.f4,t1.f12,t2.f12
FROM 
    (SELECT f3,f4,f12 FROM t WHERE f2=10 AND f5=0) t1
LEFT JOIN
    (SELECT f3,f4,f12 FROM t WHERE f2=10 AND f5=1) t2
ON
    t1.f3=t2.f3 AND t1.f4=t2.f4



Выдает то, что надо. Но, может, эту конструкцию можно упростить?
Код: sql
1.
2.
3.
SELECT t1.f3, t1.f4, t1.f12, t2.f12
FROM t t1 LEFT JOIN t t2 ON t1.f3=t2.f3 AND t1.f4=t2.f4
WHERE t1.f2=10 AND t1.f5=0 AND t2.f2=10 AND t2.f5=1

Но это уже не то, что спрашивалось в изначальном вопросе.
Однако, выяснилось что Ваш запрос все же не идентичен моему. Дело в том, что если мой подзапрос
Код: sql
1.
(SELECT f3,f4,f12 FROM t WHERE f2=10 AND f5=1) t2

возвращает NULL, то в результирующую выборку этот NULL попадает:
t1.f3t1.f4t1.f12t2.f12774477ANULL774478BC
Ваш запрос не имеет такой возможности, т.е. результат для тех же значений будет такой:
t1.f3t1.f4t1.f12t2.f12774478BC
Как это можно учесть? Ваш запрос выполняется намного быстрее моего, хотелось бы его использовать.
...
Рейтинг: 0 / 0
01.02.2017, 10:35
    #39396092
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
LiYingКак это можно учесть?
Условия по таблице t2 должны быть не во WHERE, а в ON. Иначе LEFT JOIN превращается в INNER.
...
Рейтинг: 0 / 0
01.02.2017, 10:55
    #39396120
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
Akina,

Спасибо!
В итоге, рабочий быстрый запрос by miksoft :)
Код: sql
1.
2.
3.
SELECT t1.f3, t1.f4, t1.f12, t2.f12
FROM t t1 LEFT JOIN t t2 ON t1.f3=t2.f3 AND t1.f4=t2.f4 AND t2.f2=10 AND t2.f5=1
WHERE t1.f2=10 AND t1.f5=0
...
Рейтинг: 0 / 0
01.02.2017, 11:23
    #39396150
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
AkinaУсловия по таблице t2 должны быть не во WHERE, а в ON. Иначе LEFT JOIN превращается в INNER.Да, каюсь, это я прошляпил.
...
Рейтинг: 0 / 0
01.02.2017, 12:34
    #39396233
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
LiYing , ну собсно это практически второй запрос из 20165939 с дополнительным условием по полю f2.
...
Рейтинг: 0 / 0
01.02.2017, 13:05
    #39396278
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка значений одного поля одной таблицы при двух условиях
Akina,

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


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