0

私の理解では、サブクエリは行が表示されるたびに呼び出され、この場合はすべての行が表示されます。

このクエリを書き直すにはどうすればよいですか?サブクエリは1回だけ実行する必要がありますが、グループ内に1つのエントリしかないIDを削除する必要がある場合(グループ数> 1が必要)にIDを選択する方法を考えることができません。

目的は、他の行と同じサイズの行のリストを取得することです

select id 
from file 
where size in 
    ( 
    select size from 
        (
        select count(*) as c, size 
        from file 
        group by size 
        having c>1 and size>0
        ) as t
    )
4

3 に答える 3

1

IMHOオプティマイザーがそれを処理する必要があるので、そうする必要はありません。

MySQLにステートメントを説明させます。

これを超えて、サブクエリを一時テーブルに格納できます

アップデート

CREATE TEMPORARY TABLE tmpTab
  SELECT count(*) AS c, size 
  FROM file 
  GROUP BY size 
  HAVING c>1 AND size>0;

SELECT id 
FROM file 
WHERE size IN 
    ( SELECT size FROM tmpTab )
于 2012-11-18T12:09:53.220 に答える
1

2つではなく、サブクエリだけを使用できます。

select id 
from file 
where size in (
    select size 
    from file 
    group by size 
    having count(*)>1 and size>0
    )

ただし、結合だけを使用する場合は、次のようなものを使用できます。

select distinct file.id
from file inner join file file1 on file.size = file1.size
where file.size>0 and file.id <> file1.id
于 2012-11-18T12:27:56.470 に答える
1

サブクエリに再度参加するのはどうですか?

SELECT  a.*
FROM    `FILE` a 
        INNER JOIN
        (
            SELECT  COUNT(*) as c, `SIZE` 
            FROM    `file `
            WHERE   `size` > 0
            GROUP BY size 
            having  COUNT(*) > 1
        ) b ON a.Size = b.Size
于 2012-11-18T12:36:49.697 に答える