Czy to możliwe, aby mieć oświadczenie jakWYBIERZ Z niczego?
SELECT "Hello world"
WHERE 1 = 1
w SQL?
Najważniejsze, co chcę wiedzieć, to czy mogę wybrać z niczego, tj. Nie mieć klauzuli FROM.
Czy to możliwe, aby mieć oświadczenie jakWYBIERZ Z niczego?
SELECT "Hello world"
WHERE 1 = 1
w SQL?
Najważniejsze, co chcę wiedzieć, to czy mogę wybrać z niczego, tj. Nie mieć klauzuli FROM.
Czy mogę umieścić po nim instrukcję typu: "WHERE (SELECT ...)"? –
+1. też tego nie wiedziałem. :) – sheeks06
Można. Używam następujące wiersze w StackExchange Data Explorer query:
SELECT
(SELECT COUNT(*) FROM VotesOnPosts WHERE VoteTypeName = 'UpMod' AND UserId = @UserID AND PostTypeId = 2) AS TotalUpVotes,
(SELECT COUNT(*) FROM Answers WHERE UserId = @UserID) AS TotalAnswers
dane Exchange wykorzystuje Transact-SQL (SQL Server własnych rozszerzeń do SQL).
Można spróbować samemu uruchamiając kwerendę jak:
SELECT 'Hello world'
Data Exchange jest Azure, oparta na SQL Server. –
Serwer SQL używa [języka Transact-SQL] (http://en.wikipedia.org/wiki/Transact-SQL). – palswim
To nie jest spójne sprzedawców - Oracle, MySQL, DB2 i wsparcie podwójnej:
SELECT 'Hello world'
FROM DUAL
... podczas SQL Server PostgreSQL, SQLite nie wymagają FROM DUAL
:
SELECT 'Hello world'
MySQL obsługuje zarówno sposoby.
Zawsze się zastanawiałem. Dlaczego wybór terminu dual dla tabeli fantomów? –
@Alex: "Oryginalna tabela DUAL miała dwa wiersze (stąd jej nazwa), ale później miała tylko jeden wiersz." – rebelliard
W DB2 dual nazywa się "sysibm.sysdummy1" –
W standardowym SQL, nie. Klauzula WHERE
implikuje wyrażenie tabeli.
Z SQL-92 specyfikacja:
7.6 "where clause"
Function
Specify a table derived by the application of a "search condition" to the result of the preceding "from clause".
kolejno:
7.4 "from clause"
Function
Specify a table derived from one or more named tables.
standardowy sposób to robi (tzn powinien działać na każdym produkcie SQL):
SELECT DISTINCT 'Hello world' AS new_value
FROM AnyTableWithOneOrMoreRows
WHERE 1 = 1;
... zakładając, że chcesz zmienić klauzulę WHERE
na coś bardziej znaczącego, w przeciwnym razie można ją pominąć.
BŁĄD: kolumna "hello world" nie istnieje w my_table Zapytanie nie powiodło się PostgreSQL powiedział: kolumna "hello world" nie istnieje w my_table –
@ PålBrattberg: powinny być pojedyncze cytaty, teraz poprawione. – onedaywhen
Tak, działa z pojedynczymi cudzysłowami –
W SQL Server Typ:
Select 'Your Text'
Nie ma potrzeby stosowania klauzuli FROM
lub WHERE
.
Dlaczego nie używasz bloku kodu do lepszego wyświetlania kodów? –
Myślę, że to niemożliwe. Teoretycznie: select wykonuje dwa rodzaje rzeczy:
zawęzić/poszerzyć zestaw (ustawiona teoria);
mapowanie wyniku.
Pierwszy z nich można postrzegać jako poziomą redukcję przeciwstawiającą się klauzuli where, która może być postrzegana jako pionowa redukcja. Z drugiej strony łączenie może zwiększyć zestaw w poziomie, w którym łącznik może zwiększyć zestaw w pionie.
augmentation diminishing
horizontal join/select select
vertical union where/inner-join
Drugi to mapowanie. Mapowanie jest bardziej konwerterem. W SQL zajmuje kilka pól i zwraca zero lub więcej pól. W selekcji możesz użyć niektórych funkcji agregujących, takich jak suma, śr. Itd. Albo weź wszystkie wartości kolumn i przekonwertuj je na ciąg. W C# linq mówimy, że select akceptuje obiekt typu T i zwraca obiekt typu U.
Myślę, że zamieszanie wynika z faktu, że możesz zrobić: select 'howdy' from <table_name>
. Ta funkcja jest mapowaniem, częścią konwertera wyboru. Nie drukujesz czegoś, ale konwertujesz! W przykładzie:
SELECT "
WHERE 1 = 1
konwertowania nic/null do "Hello world"
i zawężenie zestawu nic/nie stole w jednym rzędzie, która imho nie ma sensu w ogóle.
Możesz zauważyć, że jeśli nie ograniczysz liczby kolumn, zostanie wydrukowany "Hello world"
dla każdego dostępnego wiersza w tabeli. Mam nadzieję, że teraz rozumiesz dlaczego. Twój wybór nie bierze nic z dostępnych kolumn i tworzy jedną kolumnę z tekstem: "Hello world"
.
Tak, moja odpowiedź brzmi NIE. Nie można po prostu pominąć klauzuli "od", ponieważ wybór zawsze wymaga kolumn tabeli do wykonania.
wiem, jest to stara sprawa, ale najlepiej obejście za pytanie używa obojętne podzapytania:
SELECT 'Hello World'
FROM (SELECT name='Nothing') n
WHERE 1=1
W ten sposób można mieć żadnych zastrzeżeń, gdzie i jak przyłącza (lub Zastosuj, itd.) Po instrukcja select, ponieważ metoda podrzędnego zapytania wymusza użycie klauzuli FROM bez zmiany wyniku.
Nadal masz 'SELECT' bez' FROM' w swoim podkwerendzie, więc nadal będzie zawiedzać Oracle, itp. – Pere
W Oracle jest jeszcze prostsze, ponieważ możesz po prostu "WYBIERZ" Hello 'FROM dual WHERE 1 = 1' i pomiń podzapytanie. – DomingoR
OP zapytał, czy możliwe było posiadanie instrukcji (a mianowicie 'SELECT') bez klauzuli" FROM ". Nie czytałeś tego pytania? – Pere
Używam firebird Przede wszystkim, należy utworzyć tabelę jedna kolumna o nazwie "notable" jak to
CREATE TABLE NOTABLE
(
NOCOLUMN INTEGER
);
INSERT INTO NOTABLE VALUES (0); -- You can put any value
teraz można napisać ten
select 'hello world' as name
z zauważalną
możesz dodać dowolną kolumnę, którą chcesz pokazać:
Spróbuj tego.
SELECT * FROM (VALUES ("Hello world")) t1 (col1) WHERE 1 = 1
więcej szczegółów tutaj: http://modern-sql.com/use-case/select-without-from
Myślę, że dlatego, że jesteś już wybierając wartość, to nie potrzebujemy „z” klauzuli i wyjmuje wartość
Patrząc na swoim komentarzu na @ Rafael Belliard, może lepiej byłoby zapytać, co naprawdę chcesz zrobić. Czy chcesz zwrócić ciąg znaków, jeśli na przykład istnieją wartości dla danej tabeli? –
Tak, właściwie to właśnie chciałem. Wiem, że mogę to zrobić, zastanawiałem się bardziej, czy potrzebuję 'FROM NULL' między' SELECT' i 'WHERE'.Niewyraźne frazowanie głównie dlatego, że jest to praca domowa i nie chciałem, żeby ktoś przyszedł i powiedział mi odpowiedź, jeśli moje przeczucie było złe. –