Crea un implicito CROSS JOIN. È la sintassi SQL-89.
Qui uso values(1)e values(2)creo tabelle pseduo (tabelle di valori) solo per esempi. La cosa dopo di loro t(x), e g(y)sono chiamati FROM-Alias, il carattere all'interno della parentesi è l'alias per la colonna ( xe yrispettivamente). È possibile creare altrettanto facilmente una tabella per verificarlo.
SELECT *
FROM (values(1)) AS t(x), (values(2)) AS g(y)
Ecco come lo scriveresti ora.
SELECT *
FROM (values(1)) AS t(x)
CROSS JOIN (values(2)) AS g(y);
Da lì puoi renderlo implicito INNER JOINaggiungendo un condizionale.
SELECT *
FROM (values(1)) AS t(x)
CROSS JOIN (values(1)) AS g(z)
WHERE x = z;
O la INNER JOINsintassi esplicita e più recente ,
SELECT *
FROM (values(1)) AS t(x)
INNER JOIN (values(1)) AS g(z)
ON ( x = z );
Quindi nel tuo esempio ..
FROM apod, to_tsquery('neutrino|(dark & matter)') query
Questo è essenzialmente lo stesso della sintassi più recente,
FROM apod
CROSS JOIN to_tsquery('neutrino|(dark & matter)') AS query
che in realtà è lo stesso, in questo caso, perché to_tsquery()restituisce una riga e non un set come,
SELECT title, ts_rank_cd(
textsearch,
to_tsquery('neutrino|(dark & matter)')
) AS rank
FROM apod
WHERE to_tsquery('neutrino|(dark & matter)') @@ textsearch
ORDER BY rank DESC
LIMIT 10;
Tuttavia, quanto sopra potrebbe potenzialmente to_tsquery('neutrino|(dark & matter)')verificarsi due volte, ma in questo caso non to_tsqueryè - è contrassegnato come STABILE (verificato con \dfS+ to_tsquery).
STABLEindica che la funzione non può modificare il database e che all'interno di una singola scansione della tabella restituirà costantemente lo stesso risultato per gli stessi valori dell'argomento, ma che il suo risultato potrebbe cambiare attraverso le istruzioni SQL. Questa è la selezione appropriata per le funzioni i cui risultati dipendono dalle ricerche nel database, dalle variabili dei parametri (come il fuso orario corrente), ecc. (È inappropriato per i trigger AFTER che desiderano interrogare le righe modificate dal comando corrente.) Si noti inoltre che il La famiglia di funzioni current_timestamp si qualifica come stabile, poiché i loro valori non cambiano all'interno di una transazione.
Per un confronto più completo delle differenze tra SQL-89 e SQL-92, vedere anche la mia risposta qui
,che si tratti di un cross join in quanto è solo un prodotto cartesiano e non sono previsti confronti. Puoi rispondere ad un'altra domanda PER FAVORE? cosa c'èt(x)dentro(values(1)) AS t(x)???