のテーブルlocations
とのテーブルがありstockLevels
ます。私は複雑なクエリに取り組んでおり、長い間在庫があったアイテム、それらがどこにあるか、その他いくつかのことをすべて1回のヒットで教えてくれます。
その一部は私に不正確な結果を与えています。
... LEFT JOIN ...
SELECT id, sum(stockLevel) as totalStockLevel FROM stockLevels
WHERE stockLocation IN
((SELECT
GROUP_CONCAT(CONVERT(id, CHAR(8))) as idList
FROM `locations` WHERE `isThirdParty` = '0'
AND `pickFrom`='1'
GROUP BY pickFrom))
GROUP BY id)
ourStock ON ourStock.id=products.id
... MORE OF QUERY ....
これはクエリ全体のスニペットであり、内部SELECT
は単独で機能しますが、IDのリストをIN句に適用しておらず、最初の句を読み取ったようです。
それで、より明確に説明するために。
内側SELECT
:
SELECT
GROUP_CONCAT(CONVERT(id, CHAR(8))) as idList
FROM `locations` WHERE `isThirdParty` = '0'
AND `pickFrom`='1'
GROUP BY pickFrom
カンマ区切りのリスト値を、という名前の列として返します。値は次のとおりですidList
。1,2,10,11
このクエリは機能します。
元のクエリでそのカンマ区切りのリストを手動で使用すると、次のようにも機能します。
... LEFT JOIN ...
SELECT id, sum(stockLevel) as totalStockLevel FROM stockLevels
WHERE stockLocation IN
(1,2,10,11)
GROUP BY id)
ourStock ON ourStock.id=products.id
... MORE OF QUERY ....
このコードによってエラーは生成されませんが、生成される結果は次のクエリの結果です。
... LEFT JOIN ...
SELECT id, sum(stockLevel) as totalStockLevel FROM stockLevels
WHERE stockLocation IN
(1)
GROUP BY id)
ourStock ON ourStock.id=products.id
... MORE OF QUERY ....
そのため、外部クエリのIN句に挿入されている内部クエリによって生成されたコンマ区切りのリストを取得していません。
誰かが理由をアドバイスできますか?