次の表があります。
CREATE TABLE sample (
id INT
);
x行があるとしましょう。
私はそうSELECT COUNT(1) FROM sample
し、xを返します。
今私がこれをすると言う:
SELECT COUNT(1)
FROM sample AS s1
JOIN sample AS s2
ON s2.id < s1.id;
これで (x*(x-1))/2 行戻ります。
今私がこれをすると言う:
SELECT COUNT(1)
FROM sample AS s1
JOIN sample AS s2
ON s2.id < s1.id
LEFT JOIN sample AS s3
ON s3.id < s2.id;
それは私を取得しますx*(x-1)*(x-2)/6+(x-1)
。LEFT JOIN の代わりに JOIN を実行すると、x*(x-1)*(x-2)/6
行が返されます。
SELECT COUNT(1)
FROM sample AS s1
JOIN sample AS s2
ON s2.id < s1.id
LEFT JOIN sample AS s3
ON s3.id < s2.id
LEFT JOIN sample AS s4
ON s4.id > s2.id
AND s4.id < s1.id;
返される行数がわかりません。
ちなみに、最後のクエリの目的は、2 番目の ID を提供することです。例えば。
SELECT s1.id
FROM sample AS s1
JOIN sample AS s2
ON s2.id < s1.id
LEFT JOIN sample AS s3
ON s3.id < s2.id
LEFT JOIN sample AS s4
ON s4.id > s2.id
AND s4.id < s1.id
WHERE s3.id IS NULL
AND s4.id IS NULL;
ID にユーザーが関連付けられていて、特定のユーザーまたはすべてのユーザーの 2 番目の ID を見つけようとしている場合に、より便利です。私はそれが漸近的にどのように機能するかを理解しようとしています。
何か案は?ありがとう!