WHERE EXISTS
サブクエリを使用しています。
SELECT data1 FROM table1 t1 WHERE EXISTS (
SELECT id,
MATCH (...) AGAINST (...) AS rank
FROM table2 t2
WHERE MATCH (...) AGAINST (...)
) ORDER BY rank DESC
このコンテキストでは、MySQLは選択されたフィールドを無視します。次のように読むこともできます。
SELECT data1 FROM table1 t1 WHERE EXISTS (
SELECT 42
FROM table2 t2
WHERE MATCH (...) AGAINST (...)
) ORDER BY rank DESC
そして、それはまったく同じように機能します。
WHERE EXISTS
-subquery はブール値を返し、そのブール値だけを返すものと考えてください。
ランクを table2 から計算する場合はJOIN
、メイン クエリ (および場合によってはGROUP BY
句) に a を追加する必要があります。
編集:例
WHERE EXISTS
ほとんどの場合、句は必要ありません。(あなたの質問は特定するにはあまりにも具体的ではないので、これが標準的なケースです)
SELECT t1.data1, MATCH (...) AGAINST (...) AS rank
FROM table1 t1
JOIN table2 t2 ON (MATCH (...) AGAINST (...))
GROUP BY t1.id, t1.data, rank
ORDER BY rank DESC
table2 に一致する行が最大で 1 つしかない場合は、この句を使用せずにGROUP BY
直接結合するだけで済みます。
SELECT t1.data1, MATCH (...) AGAINST (...) AS rank
FROM table1 t1
JOIN table2 t2 ON (MATCH (...) AGAINST (...))
ORDER BY rank DESC