Мне любопытно, есть ли хороший способ поиска во всех столбцах для данного значения? Для моих целей это не обязательно должно быть быстрым, это всего лишь один раз, и я не хочу набирать каждое имя поля. Это именно то, что я буду делать сейчас, но я думаю, что, конечно, есть лучший способ.
Я хотел бы включить это:
SELECT * FROM table WHERE col1 = 'val' OR col2 = 'val' OR col3 = 'val';
в это:
SELECT * FROM table WHERE * = 'val'
... или даже лучше (хотя я в этом серьезно сомневаюсь ...)
SELECT * FROM table WHERE * like '%val%'
Я нашел это , что кажется довольно-таки не очень близким, но я не нахожу ничего более близкого:
SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...)
Разница заключается в том, что ищет выбранные столбцы для указанных значений, в то время как я пытаюсь найти во всех столбцах одно значение.
Это не важно, хотя, как я сказал больше всего, мне просто любопытно
Чем ближе вы можете получить это, используя
IN
:Вам все еще нужно написать все столбцы, которые вы хотите проверить.
И это ничем не отличается от того
OR
выражения, которое у вас есть, ни в исполнении, ни в ином случае. Это просто другой, эквивалентный способ написания выражения, с немного меньшим количеством символов.источник
Вам нужно сделать это в два шага, сначала сгенерировать sql-подобие (при условии, что ваша таблица имеет имя T в схеме S:
Теперь вы можете выполнить эту строку. Обратите внимание, что вы должны заключать в кавычки 'a' с дополнительным. Если вы вставите это, например, в процедуру, вы можете подготовить и выполнить сгенерированную строку.
Я проверил с:
Запрос генерируется где:
и выполнение этого приводит к:
источник
Кажется, прошел год с тех пор, как я спросил об этом, но я просто наткнулся на то, что, кажется, именно то, что я искал! Это не оператор SQL, как я ожидал, но он делает то, что я хотел.
В MySQL Workbench вы можете щелкнуть правой кнопкой мыши таблицу или схему и выбрать Search Table Data.
источник
Попробуй это:
Это предполагает, что нет
.
в вашей строке поиска. Если вы не можете гарантировать это, возможно, вы можете использовать другой «символ-разделитель».источник
%
или_
любой столбец содержит.
Самое простое решение делает
Если только val не является обычным явлением в синтаксисе sql.
источник
Попробуй это.
CONCAT () используется для разделения значений столбца так же, как здесь. Вы можете разделить свой столбец пробелом, чтобы указать лучший результат внутри функции, и проверить, что значение также разделяет строку с пробелом, и результат у вас в руках.
источник
Это возможно с помощью базы данных information_schema, мы в основном просто перечисляем все столбцы определенной таблицы, затем используем GROUP_CONCAT, чтобы перечислить их как одну строку, а затем вводить их в операторе IN.
Это вернет строку, только если 'value' присутствует во всех столбцах.
источник
if 'value' is present in any of the columns
? Кроме того, вы можете добавить предикат для строковых типов, таких как: `и DATA_TYPE IN ('char', 'varchar')`where 'value' in ('col1,col2,col3…')
.