Как использовать WHERE вместе с UNION?

Есть 2 таблицы, в каждой из них есть поле tf. Мне необходимо получить только те записи, в которых поле tf = 1h или tf = 4h или tf = 1d.
Делаю так:
SELECT `time`,`ticker`,`price`,`volume`,`icon`,`tf`,`figure`,`figure_text` FROM `figure` WHERE `figure` = 'vklin' OR `figure` = 'nklin' OR `figure` = 'doublev' OR `figure` = 'doubled' OR `figure` = 'mflag' OR `figure` = 'bflag' OR `figure` = 'flag' AND (`tf` = '1h' OR `tf` = '4h' OR `tf` = '1d') UNION SELECT `time`,`ticker`,`price`,`volume`,`icon`,`tf`,`situation`,`situation_text` FROM `levels` WHERE `situation` = 'resistance' AND (`tf` = '1h' OR `tf` = '4h' OR `tf` = '1d')

В итоге получаю записи, в которых поле tf = 15m или tf = 5m, но по условию, я не выбирал их.
Подскажите пожалуйста как правильно сформировать запрос, чтобы работал WHERE по полям tf для всех таблиц. Спасибо.
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Всё очень просто. Приоритет операций.
x OR y OR z AND q будет выполняться как x OR y OR (z AND q), так как приоритет у AND выше, чем у OR.
SELECT `time`, `ticker`, `price`, `volume`,
       `icon`, `tf`, `figure`, `figure_text`
  FROM `figure`
  WHERE `figure` IN ('vklin', 'nklin', 'doublev', 'doubled', 'mflag', 'bflag', 'flag')
    AND `tf` IN ('1h', '4h', '1d')
UNION SELECT `time`, `ticker`, `price`, `volume`,
       `icon`, `tf`, `situation`, `situation_text`
  FROM `levels`
  WHERE `situation` = 'resistance'
    AND `tf` IN ('1h', '4h', '1d')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы