Wszyscy wiemy, że do wybrania wszystkich kolumn z tabeli możemy użyć
SELECT * FROM tableA
Czy istnieje sposób na wykluczenie kolumn z tabeli bez określenia wszystkich kolumn?
SELECT * [except columnA] FROM tableA
Jedyny znany mi sposób to ręczne określenie wszystkich kolumn i wykluczenie niechcianej kolumny. Jest to naprawdę czasochłonne, dlatego szukam sposobów na zaoszczędzenie czasu i wysiłku, a także przyszłej konserwacji, jeśli tabela ma więcej / mniej kolumn.
sql
sql-server
tsql
pb2q
źródło
źródło
SELECT *
zapytania (OLE DB ma problemy z mapowaniem). Nie mogłem określić właściwych kolumn, ponieważ nie miałem bezpośredniego dostępu do bazy danych MySQL, jednak SQL Server był na tyle uprzejmy, aby poinformować mnie o nazwach kolumn char o stałej szerokości ...SELECT DISTINCT *
z wyjątkiem kolumny klucza działającej bez zduplikowanych wierszy utworzonych przez kogoś innegoOdpowiedzi:
Zgadzam się ze wszystkimi ... ale jeśli miałbym zrobić coś takiego, mógłbym to zrobić w ten sposób:
źródło
SELECT table1.ID AS table1ID ...
IIRC.Nie.
Najlepszą praktyką w zakresie konserwacji jest określenie tylko wymaganych kolumn.
Co najmniej 2 powody:
Edytuj (lipiec 2011 r.):
Przeciągnięcie
Columns
węzła z Eksploratora obiektów do tabeli powoduje umieszczenie listy kolumn CSV w oknie zapytania, co pozwala osiągnąć jeden z celówźródło
Jeśli nie chcesz ręcznie wpisywać nazwy każdej kolumny, możesz jej użyć
Script Table As
, klikając prawym przyciskiem myszy tabelę lub wyświetlając w SSMS w następujący sposób:Następnie otrzymasz całe zaznaczone zapytanie w oknie edytora nowych zapytań, a następnie usuń niechcianą kolumnę w następujący sposób:
Gotowy
źródło
Zautomatyzowanym sposobem na to w SQL (SQL Server) jest:
źródło
row_number()
do każdego wiersza, a następnie wykonaj łączenie przezrow_number
, a następnie zaznacz wszystko opróczrow_number
wyniku z połączenia.Możesz utworzyć widok z kolumnami, które chcesz wybrać, a następnie możesz po prostu
select *
z widoku ...źródło
Tak, jest to możliwe (ale nie zalecane).
Objaśnienie kodu :
SELECT @variable = @variable + ... FROM
do konkatenacji nazw kolumn. Ten typSELECT
nie zwraca zestawu wyników. Jest to być może nieudokumentowane zachowanie, ale działa w każdej wersji SQL Server. Alternatywnie możesz użyćSET @variable = (SELECT ... FOR XML PATH(''))
do połączenia łańcuchów.ISNULL
funkcji, aby wstawić przecinek, tylko jeśli nie jest to nazwa pierwszej kolumny. UżyjQUOTENAME
funkcji do obsługi spacji i interpunkcji w nazwach kolumn.WHERE
klauzuli, aby ukryć kolumny, których nie chcemy widzieć.EXEC (@variable)
, znanego również jako dynamiczny SQL , do rozpoznawania nazw kolumn w czasie wykonywania. Jest to potrzebne, ponieważ nie znamy nazw kolumn w czasie kompilacji.źródło
SELECT @columns FROM contact
Podobnie jak inni powiedzieli, że nie ma sposobu, aby to zrobić, ale jeśli używasz Sql Server, używam sztuczki, aby zmienić dane wyjściowe na oddzielone przecinkami, a następnie
i wytnij całą listę kolumn z okna wyjściowego. Następnie możesz wybrać kolumny, które chcesz, bez konieczności wpisywania ich wszystkich.
źródło
Zasadniczo nie możesz robić tego, co chcesz - ale możesz uzyskać odpowiednie narzędzia, które pomogą ci trochę ułatwić.
Jeśli spojrzysz na zapytanie SQL Red-Gate zapytanie , możesz wpisać „SELECT * FROM MyTable”, a następnie przesunąć kursor do tyłu za „*” i nacisnąć <TAB>, aby rozwinąć listę pól i usunąć te kilka pól, które nie potrzebuję
To nie jest idealne rozwiązanie - ale cholernie dobre! :-) Szkoda, że Intellisense MS SQL Server Management Studio wciąż nie jest wystarczająco inteligentne, aby oferować tę funkcję .......
Marc
źródło
nie, nie ma na to sposobu. być może możesz utworzyć niestandardowe widoki, jeśli jest to wykonalne w twojej sytuacji
EDYCJA Może być, jeśli twoja baza danych obsługuje wykonywanie dynamicznego sql u może napisać SP i przekazać kolumny, których nie chcesz widzieć i pozwolić mu dynamicznie utworzyć zapytanie i zwrócić wynik. Myślę, że jest to wykonalne przynajmniej w SQL Server
źródło
Jeśli korzystasz z SQL Server Management Studio, wykonaj następujące czynności:
Cieszyć się.
źródło
W SQL Management Studio można rozwinąć kolumny w Eksploratorze obiektów, a następnie przeciągnąć
Columns
element drzewa do okna zapytania, aby uzyskać listę kolumn oddzieloną przecinkami.źródło
Podsumowując, nie możesz tego zrobić, ale nie zgadzam się z całym powyższym komentarzem, istnieją „scenariusze”, w których możesz legalnie użyć * Po utworzeniu zapytania zagnieżdżonego w celu wybrania określonego zakresu z całej listy (np. stronicowanie) dlaczego na świecie chciałbyś określać każdą kolumnę w zewnętrznej instrukcji select, jeśli zrobiłeś to w wewnętrznej?
źródło
AKTUALIZACJA:
Możesz także utworzyć procedurę składowaną, aby zająć się tym zadaniem, jeśli będziesz go częściej używać. W tym przykładzie użyłem wbudowanej funkcji STRING_SPLIT (), która jest dostępna w SQL Server 2016+, ale jeśli potrzebujesz, istnieje wiele przykładów tego, jak ręcznie ją utworzyć na SO.
A potem tylko:
źródło
Jeśli mówimy o procedurach, działa z tą sztuczką, aby wygenerować nowe zapytanie i WYKONAJ NATYCHMIAST :
źródło
Używając deklaratywnego SQL w zwykły sposób, nie.
Myślę, że twoja proponowana składnia jest godna i dobra. W rzeczywistości język relacyjnych baz danych „Tutorial D” ma bardzo podobną składnię, w której po słowach kluczowych
ALL BUT
następuje zestaw atrybutów (kolumn).Jednak SQL
SELECT *
już ma wiele błędów (odpowiedź @ Guffa tutaj jest typowym zastrzeżeniem), więc nie sądzęSELECT ALL BUT
, że w najbliższym czasie przejdzie do SQL Standard.Myślę, że najlepszym „obejściem” jest stworzenie
VIEW
tylko takich kolumn, jakich sobie życzyszSELECT * FROM ThatView
.źródło
select *
jest wątpliwy - bardzo przydatny w przypadku rzeczy ad hoc i programów, które muszą ogólnie obsługiwać tabele danych, ale nie tak bardzo do budowania (bez lepszego słowa) „czyste” zapytania. Mimo to, nie będąc w standardzie ANSI, nie oznacza to, że Microsoft nie może dodać go do swojego dialektu, jak w przypadku wielu innych rzeczy, ale jestem sceptyczny, czy by to zrobili.Nowoczesny dialekt SQL, taki jak BigQuery, oferuje doskonałe rozwiązanie
Jest to bardzo potężna składnia SQL, która pozwala uniknąć długiej listy kolumn, które należy cały czas aktualizować z powodu zmian nazw kolumn tabeli. A tej funkcji brakuje w bieżącej implementacji SQL Server, a szkoda. Mamy nadzieję, że pewnego dnia Microsoft Azure będzie bardziej przyjazny dla naukowców.
Badacze danych lubią mieć możliwość szybkiego skracania zapytania i usuwania niektórych kolumn (z powodu duplikacji lub z innego powodu).
https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers
źródło
Postgres sql ma na to sposób
Pls refer: http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html
Schemat informacyjny Hack Way
Powyższe dla mojej konkretnej przykładowej tabeli - generuje instrukcję SQL, która wygląda następująco
WYBIERZ o.officepark, o.owner, o.squarefootage FROM officepark As o
źródło
Nie znam żadnej bazy danych, która to obsługuje (SQL Server, MySQL, Oracle, PostgreSQL). Zdecydowanie nie jest częścią standardów SQL, więc myślę, że musisz określić tylko te kolumny, które chcesz.
Można oczywiście zbudować instrukcję SQL dynamicznie i zlecić jej wykonanie przez serwer. Ale to otwiera możliwość zastrzyku SQL.
źródło
Wiem, że to trochę stare, ale właśnie natknąłem się na ten sam problem i szukałem odpowiedzi. Potem poprosiłem starszego programistę o pokazanie bardzo prostej sztuczki.
Jeśli używasz edytora zapytań w studiu zarządzania, rozwiń bazę danych, a następnie rozwiń wybraną tabelę, aby wyświetlić folder kolumn.
W swojej instrukcji select, po prostu zaznacz powyższy folder kolumn, do których istnieją odniesienia, a następnie przeciągnij i upuść go w oknie zapytania. Wklei wszystkie kolumny tabeli, a następnie po prostu usunie kolumnę tożsamości z listy kolumn ...
źródło
SELECT * Except(tableName.ColumnName) FROM ...
Najlepszym sposobem rozwiązania tego jest użycie widoku, który można utworzyć z wymaganymi kolumnami i pobrać z niego dane
źródło
Jeśli chcesz wykluczyć wrażliwą kolumnę wielkości liter, na przykład hasło, robię to, aby ukryć wartość:
SELECT * , "" as password FROM tableName;
źródło
Cóż, powszechną najlepszą praktyką jest określanie, które kolumny chcesz, zamiast tylko *. Powinieneś więc tylko określić, które pola chcesz zwrócić.
źródło
Kolega doradził dobrą alternatywę:
Gotowy...
To nam bardzo pomogło.
źródło
Kliknij tabelę prawym przyciskiem myszy w Eksploratorze obiektów, wybierz 1000 najlepszych wierszy
Wyświetli wszystkie kolumny, a nie *. Następnie usuń niechciane kolumny. Powinno być znacznie szybsze niż samodzielne pisanie.
Następnie, gdy poczujesz, że to trochę za dużo pracy, pobierz SQL Gate Prompt Red Gate i wpisz ssf z tbl, przejdź do * i ponownie kliknij kartę.
źródło
Tego używam często w tym przypadku:
@colnames
wygląda jakcolumn1,column2,column5
źródło
Czasami ten sam program musi obsługiwać różne struktury baz danych. Nie mogłem więc użyć listy kolumn w programie, aby uniknąć błędów w
select
instrukcjach.*
daje mi wszystkie opcjonalne pola. Przed użyciem sprawdzam, czy pola istnieją w tabeli danych. To jest mój powód do używania*
wselect
.Tak radzę sobie z wyłączonymi polami:
źródło
Wiem, że to pytanie jest stare, ale mam nadzieję, że nadal może być pomocne. Odpowiedź jest inspirowana dyskusją na forach SQL Server . Możesz uczynić to procedurą składowaną . Można go również zmodyfikować, aby dodać więcej niż jedno oprócz pól.
źródło
Czy nie byłoby łatwiej to zrobić:
-Kliknij kolumnę „Nazwa kolumny”> Kopiuj> Wklej (tworzy listę pionową) do okna Nowe zapytanie i po prostu wpisz przecinki przed każdą wartością kolumny ... skomentuj kolumny, których nie chcesz ... znacznie mniej pisanie niż jakikolwiek kod tutaj oferowany i nadal możliwy do zarządzania.
źródło
Możesz pobrać SQL Complete z devart.com, który nie tylko rozwija * symbol wieloznaczny, podobnie jak SQL Monit z Czerwonej Bramy (jak opisano w odpowiedzi Cairnza), ale także zapewnia rozwijanie selektora kolumn z polami wyboru, w których możesz sprawdzić wszystkie kolumny, które chcesz na liście wyboru, a zostaną one wstawione automatycznie (a jeśli odznaczysz kolumnę, zostanie ona automatycznie usunięta z listy wyboru).
źródło
W SSMS jest łatwiejszy sposób dzięki IntelliSense i Aliasing . Spróbuj tego
źródło