Bir örtük oluşturur CROSS JOIN
. SQL-89 sözdizimidir.
Burada kullandığım values(1)
ve values(2)
sadece örnekler için pseduo-tablolar (değer tablolar) oluşturun. Onlardan sonra gelen t(x)
ve FROM-Diğer Adlarıg(y)
olarak adlandırılan parantez içindeki karakter sütun ( ve sırasıyla) için diğer addır . Bunu test etmek için kolayca bir tablo oluşturabilirsiniz.x
y
SELECT *
FROM (values(1)) AS t(x), (values(2)) AS g(y)
Şimdi nasıl yazacağınız.
SELECT *
FROM (values(1)) AS t(x)
CROSS JOIN (values(2)) AS g(y);
Oradan INNER JOIN
bir koşul ekleyerek bunu örtük yapabilirsiniz .
SELECT *
FROM (values(1)) AS t(x)
CROSS JOIN (values(1)) AS g(z)
WHERE x = z;
Veya açık ve yeni INNER JOIN
sözdizimi,
SELECT *
FROM (values(1)) AS t(x)
INNER JOIN (values(1)) AS g(z)
ON ( x = z );
Yani örneğinizde ..
FROM apod, to_tsquery('neutrino|(dark & matter)') query
Bu aslında daha yeni sözdizimiyle aynı,
FROM apod
CROSS JOIN to_tsquery('neutrino|(dark & matter)') AS query
bu aslında aynıdır, çünkü bu durumda to_tsquery()
bir satır değil , bir satır döndürür,
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;
Bununla birlikte, yukarıdakiler potansiyel olarak to_tsquery('neutrino|(dark & matter)')
iki kez ortaya çıkabilir, ancak bu durumda - STABLE (ile doğrulandı ) to_tsquery
olarak işaretlenir .\dfS+ to_tsquery
STABLE
, işlevin veritabanını değiştiremediğini ve tek bir tablo taramasında aynı bağımsız değişken değerleri için sürekli olarak aynı sonucu döndüreceğini, ancak sonucunun SQL deyimleri arasında değişebileceğini belirtir. Bu, sonuçları veritabanı aramalarına, parametre değişkenlerine (geçerli saat dilimi gibi), vb. Bağlı olan işlevler için uygun seçimdir. (Geçerli komut tarafından değiştirilen satırları sorgulamak isteyen AFTER tetikleyicileri için uygun değildir.) Ayrıca current_timestamp işlev ailesi, değerleri bir işlem içinde değişmediği için kararlı olarak nitelendirilir.
SQL-89 ve SQL-92 arasındaki farkların daha eksiksiz bir karşılaştırması için, ayrıca buradaki yanıma da bakın
,
Kartezyen bir ürün olduğu ve karşılaştırma yapılmadığı için çapraz birleştirme olması mantıklıdır . Sadece 1 soru daha cevaplayabilir misiniz LÜTFEN? net(x)
de(values(1)) AS t(x)
???