MySQL - Использование AND и OR в той же консультации

Я считаю таблицу этой, у которой есть две линии:

nombre_per   | apellido_per   | permisos_busqueda_per
-------------+----------------+----------------------
Mattew       | Janeey         | SI
Janny        | Pineda         | NO

Моя консультация - следующая

SELECT nombre_per, apellido_per, permisos_busqueda_per 
FROM   la_tabla 
WHERE  nombre_per LIKE '%a%' OR apellido_per LIKE '%a%' AND permisos_busqueda_per="SI"

Если я ищу только пользователи, которые считали уполномоченным разрешение, чтобы искаться (permisos_busqueda_per): почему он дает мне как оказанный две линии, если у Janny нет данная возможность разрешения того, чтобы быть расположенной напротив?

15
задан 27.12.2016, 19:30
6 ответов

Это проблема с предшествованием операторов, как ты можешь видеть в документации MySQL, оператор AND предпочитает на OR, это способствует тому, чтобы твой SELECT выбрал основываясь при данных условиях:

  • люди, у которых было бы имя с буквой "a"; Или
  • люди, у которых была бы фамилия с буквой "a" И разрешения, равные "СЕБЕ"

когда действительно то, что он хочет, это:

  • люди, у которых была бы имя или фамилия с буквой "a"; И
  • разрешения, равные "СЕБЕ"

Решение простое: используй скобку:

SELECT nombre_per, apellido_per, permisos_busqueda_per 
FROM   la_tabla 
WHERE  (nombre_per LIKE '%a%' OR apellido_per LIKE '%a%') AND permisos_busqueda_per="SI"
20
ответ дан 24.11.2019, 14:07

Доказательство группируя условия со скобкой

SELECT nombre_per, apellido_per, permisos_busqueda_per FROM la_tabla WHERE (nombre_per LIKE '%a%' OR apellido_per LIKE '%a%') AND permisos_busqueda_per="SI
5
ответ дан 24.11.2019, 14:07

У тебя есть ошибка в консультации, ты должен меняться:

SELECT * FROM nombre_per, apellido_per, permisos_busqueda_per FROM la_tabla WHERE nombre_per LIKE '%a%' OR apellido_per LIKE '%a%' AND permisos_busqueda_per="SI"

Поэтому:

    SELECT nombre_per, apellido_per, permisos_busqueda_per FROM la_tabla WHERE nombre_per LIKE '%a%' AND permisos_busqueda_per= 'SI'
 OR apellido_per LIKE '%a%' AND permisos_busqueda_per= 'SI'

problem был в 'or'. Я надеюсь, что он подает тебе

3
ответ дан 24.11.2019, 14:07

Как они прокомментировали в других ответах твою проблему будь, в котором операторы согласно документации не продолжают процесс, который ты ждешь; я рекомендую тебе, что, когда utilizes ты это сделал операции такими:

SELECT nombre_per, apellido_per, permisos_busqueda_per 
FROM   la_tabla 
WHERE  (nombre_per LIKE '%a%' OR apellido_per LIKE '%a%') 
        AND permisos_busqueda_per="SI"

Отделяя в различных линиях AND и всегда используя () в каждой линии.

3
ответ дан 24.11.2019, 14:07

Это само, я кроме того не уверен на mysql, но в sql ты должен использовать простые кавычки для strings, а именно 'вместо"

1
ответ дан 24.11.2019, 14:07

другие люди уже это документировали, но что у тебя есть, что знание состоит в том, что порядок факторов влияет много на консультации, он приносит тебе две стоимость, потому что последнее, что последним, что он делает, является OR, ты именно поэтому должен помещать ее внутри них parГ©ntesis, чтобы отличаться между одной operaciГіn от другой, и не смог запутывать управляющий делами

SELECT nombre_per, apellido_per, permisos_busqueda_per FROM la_tabla WHERE (nombre_per LIKE '%a %' OR apellido_per LIKE '%a %') AND permisos_busqueda_per =, "ЕСЛИ"

ты Должен помнить, что порядок ejecuciГіn в этом случае после Where идет сначала скобки и потом AND, уже seleccionГі все то, что у его имени и фамилии есть "a" и после он переходит, чтобы проверять разрешения

Надеялся, что он ты помогает она informaciГіn

1
ответ дан 24.11.2019, 14:07