Jestem ciekawy, czy istnieje dobry sposób na przeszukanie wszystkich kolumn pod kątem określonej wartości? Dla moich celów wcale nie musi to być szybkie, to po prostu jednorazowa rzecz i naprawdę nie chcę wpisywać każdej nazwy pola. Właśnie to teraz zrobię, ale myślę, że na pewno jest lepszy sposób.
Chciałbym to zmienić:
SELECT * FROM table WHERE col1 = 'val' OR col2 = 'val' OR col3 = 'val';
zaangażowany w to:
SELECT * FROM table WHERE * = 'val'
... lub nawet lepiej (choć poważnie w to wątpię ...)
SELECT * FROM table WHERE * like '%val%'
Znalazłem to , co wydaje się trochę niezbyt blisko, ale nie znajduję nic bliższego:
SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...)
Różnica polega na tym, że przeszukuje wybrane kolumny dla określonych wartości, podczas gdy próbuję przeszukać WSZYSTKIE kolumny dla jednej wartości.
Nie jest to jednak ważne, jak powiedziałem bardziej niż wszystko, jestem po prostu ciekawy
Im bliżej możesz to zrobić, używając
IN
:Nadal musisz napisać wszystkie kolumny, które chcesz sprawdzić.
I nie różni się niczym od
OR
wyrażenia, które masz, ani w wykonaniu, ani w żaden inny sposób. To tylko inny, równoważny sposób pisania wyrażenia, z nieco mniejszą liczbą znaków.źródło
Musisz to zrobić w dwóch krokach, najpierw wygeneruj kod SQL podobny (zakładając, że twoja tabela nosi nazwę T w schemacie S:
Teraz możesz wykonać ten ciąg. Pamiętaj, że musisz zacytować „a” z dodatkowym. Jeśli umieścisz to na przykład w procedurze, możesz przygotować i wykonać wygenerowany ciąg.
Testowałem z:
Wygenerowane zapytanie gdzie:
i wykonanie tego powoduje:
źródło
Wydaje mi się, że minął rok odkąd go o to poprosiłem, ale natknąłem się na to, co wydaje się być dokładnie tym, czego szukałem! To nie jest instrukcja SQL, jak się spodziewałem, ale robi to, czego chciałem.
W MySQL Workbench możesz kliknąć tabelę lub schemat prawym przyciskiem myszy i wybrać opcję Wyszukaj dane tabeli.
źródło
Spróbuj tego:
Zakłada się, że
.
w szukanym ciągu nie ma żadnych znaków. Jeśli nie możesz tego zagwarantować, być może możesz użyć innego „znaku separatora”.źródło
%
lub_
kolumna zawiera.
Najprostsze rozwiązanie to robi
Chyba że val jest czymś, co jest częstym zjawiskiem w składni sql.
źródło
Spróbuj tego.
CONCAT () służy do oddzielania wartości kolumn tak samo, jak tutaj możesz oddzielić kolumnę spacją, aby określić lepszy wynik w funkcji i sprawdzić wartość oddzielonego łańcucha spacją, a wynik jest w twojej ręce.
źródło
Jest to możliwe przy użyciu bazy danych information_schema, po prostu wylistujemy wszystkie kolumny określonej tabeli, a następnie użyjemy GROUP_CONCAT, aby wyświetlić je jako jedną linię, a następnie podać je w instrukcji IN.
Zwróci wiersz tylko wtedy, gdy we wszystkich kolumnach występuje „wartość”.
źródło
if 'value' is present in any of the columns
? Ponadto można dodać predykat dla typów ciągów, takich jak: `i DATA_TYPE IN ('char', 'varchar')`where 'value' in ('col1,col2,col3…')
.