Czy istnieje sposób tylko na SELECT
wiersze z określonymi danymi w kolumnie, bez użycia WHERE
?
np. gdybym to miał:
SELECT * FROM Users
WHERE town = 'Townsville'
czy istnieje sposób na implementację WHERE
klauzuli w SELECT
instrukcji?
coś jak
SELECT *, town('Townsville') FROM Users
To dziwne pytanie, ale zadają je moi rówieśnicy
sql-server
Josh Stevenson
źródło
źródło
Odpowiedzi:
Nie jestem pewien, czy tego rodzaju zwariowanych rzeczy szukałeś ...
Oświadczenie : Absolutnie nie mam pojęcia, dlaczego chcesz tego użyć.
źródło
Dane
Alternatywne rozwiązania
Zatrzymywanie duplikatów
Wynik:
Na przykład:
Wypróbuj tutaj: Stack Exchange Data Explorer
źródło
GROUP BY
rozwiązań można również dodać PK do grupy według listy (aby być w 100% pewnym, że zapytania zwracają tę samą liczbę wierszy co GDZIE). Zakładając oczywiście, że jest PK;)Inny sposób.
( Zmiana danych przykładowych Paula White'a )
źródło
„Po prostu dla zabawy” można użyć
order by
ztop(1) with ties
Spowoduje to uporządkowanie wszystkich wierszy
Townsville
od pierwszego, ponieważ sprawa zwraca1
iftown = 'Townsville'
. Wszystkie pozostałe wiersze będą2
zwracane przez skrzynkę.with ties
Klauzula sprawia, że zapytanie zwróci wszystkie wiersze, które jest „tie” na ostatnim miejscu w rzędach zwrócone. Użycietop(1)
w połączeniu zwith ties
zwróci następnie wszystkie wiersze, które mają tę samą wartość, co pierwszy wiersz w wyrażeniu użyty w kolejności według klauzuli.Uwaga: jak zauważył Martin Smith w komentarzu, zwróci wszystkie wiersze, jeśli poprosisz o miasto, którego nie ma w tabeli.
Jeśli nie boisz się XML-a baz danych, możesz skorzystać z predykatu w funkcji nodes ().
Pożyczenie zestawu od Paula White'a.
Kolejna wersja z
top
iorder by
że rzeczywiście praca przy wyszukiwaniu nie istniejących miast.źródło
Masz tutaj dwie różne rzeczy.
Ograniczy liczbę wierszy, które otrzymasz z powrotem, tylko do tych, w których miasto =
Townsville
Prześle literał
Townsville
do funkcji o nazwietown
. Nie ograniczy to wierszy zwracanych przez zapytanie, a jeśli funkcja zwróci cokolwiek poza jedną wartością, pojawi się błąd.Istnieją inne sposoby ograniczenia liczby wierszy zwracanych z zapytania. Na przykład klauzula HAVING. Ale ma kilka innych wymagań.
Lub WEJŚCIE DO WEWNĘTRZNEJ, choć ten jest nieco dziwny, jeśli nie masz drugiego stołu.
źródło
Oto przykład z wykorzystaniem wspólnego wyrażenia tabelowego (CTE).
źródło
Możesz to zrobić:
Ściśle mówiąc, nie używasz klauzuli WHERE
źródło
Oto
idiotyczny,całkowicie logiczny sposób na zrobienie tego, czego jeszcze nie widzę ...Nie mogę sobie wyobrazić, dlaczego nie była to pierwsza sugestia. :)
źródło
Wszystkie miasta oprócz Townsville byłyby zerowe. Problem rozwiązany.
źródło