2012-03-16 14 views
0

このクエリは効率的です。これは、サブクエリ内から同じテーブルから2回選択しています。クエリの効率

SELECT DISTINCT country, rowCount FROM 
(
    SELECT *, (
     SELECT COUNT(id) FROM tbl WHERE hide != 1 AND country = y.country 
    ) AS rowCount FROM tbl y 

) AS x 
HAVING rowCount >= 1 
ORDER BY x.country ASC 

私は必要なテーブルをインデックス化していると、クエリが「0.000秒」(HeidiSQLが言う)で実行されるので、それは良いことがあります、しかし、クエリの構造を改善するものがありますか?それは単一のクエリのように書き換えることができるように

+0

このクエリは何をしますか? –

+0

異なる国名のリストを選択します。同一の国コードを持つフィールドの数は1以上です。 – James

+0

これは不必要に複雑です(私が問題を正しく理解している場合)。 –

答えて

3

は思え:

SELECT country, COUNT(id) rowCount 
FROM tbl 
WHERE hide <> 1 
GROUP BY country 
HAVING rowCount >= 1 

遊び場:http://sqlfiddle.com/#!2/28978/1

+0

これははるかに良いようです!ありがとう! – James

+2

@James::)ええ、sqlfiddleは素晴らしいです。誰もが質問でそれを使用した場合:) –