Podczas tworzenia zapytania MySQL bez ograniczeń WHERE większość ludzi używa WHERE 1 w zapytaniu. Pominięcie WHERE 1 nie ma wpływu na zapytanie. Czy istnieje różnica między tymi dwoma? Czy uważa się za najlepszą praktykę?Znaczenie WHERE 1 w zapytaniach MySQL
Odpowiedz
Nie sądzę, że jest to kwestia najlepszej praktyki, ale ludzie czasami używają go do łatwiejszego budowania dynamicznych zapytań.
string sql = "SELECT * FROM mytable WHERE 1 ";
if (somecondition) {
sql += "AND somefield = somevalue ";
}
if (someothercondition) {
sql += "AND someotherfield = someothervalue ";
}
... etc
Bez WHERE 1
tam musiałbym sprawdzić w każdej if
bloku czy musiałem włożyć w WHERE
lub AND
.
To nie jest konieczne. 99,9% czasu oznacza po prostu, że zapytanie zostało zbudowane dynamicznie, a wprowadzenie WHERE 1
prowadzi do uproszczenia logiki dynamicznych zdań warunkowych, co oznacza, że można po prostu dodawać AND id = 3
na końcu zapytania i nie będzie ono łamało składni. Jeśli nie masz WHERE 1
musisz się martwić o to, czy istnieje klauzula WHERE
i czy przedkładać swój stan z AND
, czy też nie.
Zasadniczo to tylko lenistwo.
Jest to jedna, mniej ważna sprawa dla automatycznych generatorów kodu i innych manipulatorów instrukcji SQL. Po uruchomieniu sekcji filtrowania za pomocą where 1
(lub where 1 = 1
) twój automatyczny generator kodu może po prostu dodać nowe filtry z prefiksem and
.
Inaczej masz tendencję do końca się z kodu, takich jak:
query = "select * from tbl"
sep = " where "
foreach clause in all_clauses:
query = query + sep + clause
sep = "and "
który nie jest tak czysty, jak:
query = "select * from tbl where 1 = 1"
foreach clause in all_clauses:
query = query + " and " + clause
Powinna ona bardzo małą różnicę żadnych godnych DBMS od egzekucji Silnik powinien rozebrać ten rodzaj klauzul przed wykonaniem zapytania.
Wybór najlepszej praktyki zależy od tego, czy wolisz mieć "czystszy" kod w generatorze zapytań, czy wolisz, aby firma DBA próbowała Cię wyśledzić i pobiła Cię na śmierć za używanie takich głupie klauzule :-) Oczywiście, jeśli używasz MySQL, możesz być DBA, więc nie może być problem.
- 1. mySQL regex w klauzuli WHERE
- 2. Grupa MySQL z klauzulą where z liczbą większą niż 1
- 3. MySQL WHERE LIKE
- 4. MySql - HAVING vs WHERE
- 5. Czy kolejność pozycji w SQL: WHERE IN() ma znaczenie?
- 6. Co oznacza "WHERE 1" w SQL?
- 7. Jaki jest cel użycia WHERE 1 = 1 w instrukcjach SQL?
- 8. SELECT WHERE IN w node-mysql
- 9. Znaczenie X = X [:, 1] w Pythonie
- 10. Jakie jest znaczenie nazwy indeksu podczas tworzenia indeksu w MySQL?
- 11. MySql Inner Join z WHERE
- 12. MySQL WHERE, LIMIT i paginacja
- 13. Podzapytanie Mysql skutkuje klauzulą "where"
- 14. Dwukierunkowe relacje w zapytaniach SQL
- 15. PHP zmienne ciąg w WHERE MySQL
- 16. Używanie MYSQL GROUP_CONCAT w klauzuli WHERE
- 17. MySQL - Korzystanie COUNT (*) w klauzuli WHERE
- 18. Python złącza MySQL 35 Zasób tymczasowo niedostępny przy dużych zapytaniach?
- 19. MySQL równo rozłożone losowo wiersze z WHERE
- 20. Aktualizowanie kolejności wyświetlania wielu wierszy MySQL w jednym lub kilku zapytaniach
- 21. HQL: używanie Boolean w nazwanych zapytaniach
- 22. Kolumna aktualizacji MySQL +1?
- 23. Dlaczego MySQL nie używa indeksów w klauzuli WHERE IF?
- 24. Problemy z kalkulacją Mysql: 1 + 1 = 1.999999999
- 25. Dynamic MySQL Where Clause in Stored Procedure
- 26. MySQL bezpośredni INSERT INTO z WHERE
- 27. MySQL WHERE NOT IN bardzo powolny
- 28. MySQL za pomocą MAX() z klauzul WHERE
- 29. Pole MySQL - LONGTEXT zawiesza się w instrukcji SELECT-WHERE
- 30. Wyrażenia regularne w zapytaniach SQLalchemy?
+1 jesteś szybszy ode mnie: P – Diadistis
@Eric Czy istnieje różnica prędkości między "WHERE 1" i "WHERE 1 = 1"? – fire
@fire - nie mam pojęcia, musisz sprawdzić, aby dowiedzieć się, ale myślę, że każdy przyzwoity optymalizator wyeliminuje oba wyrażenia jako nieistotne dla zapytania. –