私はという2つのクエリを取得しています。はmysqlデータベースから、1つは動作しますが、私の質問は「なぜですか?Mysqlサブ選択問題
問題:最初のクエリを実行する場合 、MySQLサーバは、100%のCPU使用率を取得し、再び機能を再起動しなければなりません。
クエリ1(動作しない):
SELECT tags.*, COUNT(ct.company_id) AS count
FROM company2tag ct, tags
WHERE ct.company_id IN (
SELECT ct.company_id FROM company2tag ct
WHERE ct.tag_id = 18
GROUP BY ct.company_id
HAVING COUNT(ct.company_id) = 1
)
AND tags.id != 18
AND tags.id = ct.tag_id
GROUP BY ct.tag_id
ORDER BY count DESC
LIMIT 5;
クエリ2(作品):
SELECT tags.*, COUNT(ct.company_id) AS count
FROM company2tag ct, tags
WHERE ct.company_id IN (5864, 5870, 6140, 6221, 6268)
AND tags.id != 18
AND tags.id = ct.tag_id
GROUP BY ct.tag_id
ORDER BY count DESC
LIMIT 5;
は、私の理解するには、上記の2つのクエリが完全に同じことを行う、唯一の最初の問合せが副選択を介してその「company_id」を検索するという違いがあります。
どうすればいいですか?
サブクエリはどのように単独で動作しますか? – paxdiablo
は完全に動作し、company_idのリストを返します。 – smoove
SQLが有効でないために2番目のクエリがどのように機能するかわかりません。集計関数ではない選択されたすべてのフィールドは、GROUP BYリスト(あなたの場合はタグ。*)に存在する必要があります。 – Tihauan