私は2つのテーブルを持っています:data
そしてimg
それぞれがテーブルdata
に0、1、またはn個の画像を持っていることから生img
です。data
に複数の画像があることからすべてのレコードを取得できるようにしたいimg
。SQLクエリの最初の部分を編集できないため、JOINを使用できませんSELECT some_defualt_columns FROM data WHERE
。これが私の解決策です:
解決策1実行には時間がかかりますが、機能します
SELECT some_defualt_columns FROM data WHERE `id` IN
(SELECT data_id FROM
(SELECT data_id, count(*) as occ FROM
img GROUP BY data_id
HAVING occ >1)
AS tmp)
解決策2これは以前よりも高速であるはずです(MySQL:FROM句の制限でサブクエリを使用して表示)が、これは文字通り私のMySQLサーバーを強制終了します
SELECT * FROM data WHERE id IN
(SELECT data_id FROM img
GROUP BY `data_id`
HAVING count(`data_id`) > 1)
解決策3たぶん断食しますが、ビューを作成する必要があります。
CREATE VIEW my_data_with_more_than_one_img AS
SELECT all_columns_of_data_table FROM
data JOIN img
GROUP BY img.data_id
HAVING (COUNT(img.data_id) > 1
これで簡単SELECT
に実行するよりも:
SELECT * FROM my_data_with_more_than_one_img WHERE 1
この最後の解決策はかなり速いですが、これを行うためのより速い(またはより賢い)方法があるかどうか知りたいです