私の質問:
select b.*,a.`USA`as fd_lat,b.`UK` as fd_lot
from fdusa a
join incident_uk b
on a.`FBI`=b.`FBI`
and b.STATE='MD'
limit 0,5
私は列名を持っていますINC_KEY
、
制限が0,5の場合。1つの結果が5回表示されます。同じインシデントキーが表示されます。
残りの値の別のインシデントキーとしてクエリを変更する方法。
そこでの JOIN 操作が複数の同様の結果を生成していると思われます。2つのテーブルを結合する場合
A B
------
1 10
2 25
3 40
A C
------
1 x
1 x
2 z
あなたが得る
A B C
-------
1 10 x
1 10 x
2 25 z
簡単な修正は、SELECT 句で DISTINCT を使用することです。
SELECT DISTINCT b.*,a.`USA`as fd_lat,b.`UK` as fd_lot
それがあなたに合わない場合は、いつでも GROUP BY インシデント キーを使用して、そこから取得できます。
簡単な答えは、結果を他のキーでソートするか、場合によってはランダムにソートすることです。order by
句を の前に置きlimit
ます。
order by rand()
それらをランダムな順序で配置します。ただし、それらが異なるという保証はありません。
2 番目のアプローチはgroup by
、さまざまなインシデント キーのさまざまな値を取得するために使用されます。以下は、MySQL でほとんどの場合に動作しますが、保証されていません。
select b.*,a.`USA`as fd_lat,b.`UK` as fd_lot
from fdusa a
join incident_uk b
on a.`FBI`=b.`FBI`
and b.STATE='MD'
group by inc_key
limit 0,5
これにより、inc_key ごとに 1 行が返されます ( のためgroup by
)。残りの列は、同じ値の inc_key を持つ行から任意に選択されます。実際には、最初の行から来ているように見えますが、ドキュメントにはこれが保証されていないと明示的に記載されています。また、それらが同じ行から来るという保証もありません。