3

商品選びに役立つテーブルをご用意しました。

次のすべてのレコードを取得したクエリが必要です。

category_id = 'M10' and band_id = '010'
OR
category_id = 'M10' and band_id = '020'

AND

category_id = 'M50' and band_id = '010'
OR
category_id = 'M50' and band_id = '020'

私のクエリ:

SELECT 
product.entry_id AS entry_id, 
helpme.item_id AS product_id 
FROM inbound_help_me_choose helpme 
LEFT JOIN exp_channel_titles product ON (product.product_id = helpme.item_id) 
WHERE 
helpme.submarket_id = 'NZ' 
AND 
(
(helpme.category_id = 'M10' AND helpme.band_id = '010') 
OR 
(helpme.category_id = 'M10' AND helpme.band_id = '020')
)

最初のカテゴリでは問題なく動作しますが、新しい WHERE 条件を追加するとすぐに失敗します:

SELECT 
product.entry_id AS entry_id, 
helpme.item_id AS product_id 
FROM inbound_help_me_choose helpme 
LEFT JOIN exp_channel_titles product ON (product.product_id = helpme.item_id) 
WHERE 
helpme.submarket_id = 'NZ' 
AND 
(
(helpme.category_id = 'M10' AND helpme.band_id = '010') 
OR 
(helpme.category_id = 'M10' AND helpme.band_id = '020')
)
AND
(
(helpme.category_id = 'M50' AND helpme.band_id = '010')
OR 
(helpme.category_id = 'M50' AND helpme.band_id = '020')
OR 
(helpme.category_id = 'M50' AND helpme.band_id = '030')
)

私には問題ないように思えるので、機能しない理由を完全に失いました。

4

4 に答える 4

3

これが必要だと思います

SELECT 
product.entry_id AS entry_id, 
helpme.item_id AS product_id 
FROM inbound_help_me_choose helpme 
LEFT JOIN exp_channel_titles product ON (product.product_id = helpme.item_id) 
WHERE 
helpme.submarket_id = 'NZ' 
AND 
(
   (helpme.category_id = 'M10' AND helpme.band_id IN ('010','020')) OR 
   (helpme.category_id = 'M50' AND helpme.band_id IN ('010','020','030'))
)
于 2013-01-13T03:07:42.253 に答える
1

必要なものを少し変更します。

category_id = 'M10' and band_id = '010' OR category_id = 'M10' and band_id = '020'
AND
category_id = 'M50' and band_id = '010' OR category_id = 'M50' and band_id = '020'

と同じです:

category_id = 'M10' and (band_id = '010' OR band_id = '020')
AND
category_id = 'M50' and (band_id = '010' OR band_id = '020')

と同じです:

category_id = 'M10' and category_id = 'M50'
AND
(band_id = '010' OR band_id = '020') and (band_id = '010' OR band_id = '020')

category_id両方M10になることはできないM50ので、結果は得られません...

于 2013-01-13T03:12:04.693 に答える
1

質問に表示されている2番目の例のクエリ内のwhere句の条件、そのwhere句で問題が発生したものは、trueと評価されることはありません...

最初の例の最初の where 句だけでは、category_id が M10 に等しい必要があります。

次に、2 番目の例では、where 句に「and」を使用してステートメントの別のグループが追加されます。問題は、このwhere句がM50のcategory_idを持つレコードのみを必要とすることです

ロジックに関する他の問題に関係なく、同時に M10 と M50 の両方の category_id を持つレコードが見つからないことはほぼ確実です。

別のユーザー @rs. 最初または質問で指定された条件付き論理ルールを満たす、変更された where 句を含むクエリを投稿しました。

于 2013-01-13T03:18:40.717 に答える
0

x AND y演算子とは、適用される条件xと条件の両方yが同時に満たされる必要があることを意味します。OR代わりに演算子を使用する必要があります。

于 2013-01-13T03:08:44.707 に答える