0

したがって、この最初の SQL はゼロ行を返します。

SELECT b.b_id 
FROM `buy` b 
    INNER JOIN `buy_multiples` AS bm 
        ON b.b_id = bm.b_id 
        AND b.buy_status IN (2)  
WHERE bm.`option_type` = 'area_id'  
AND bm.selected_option_key IN (10)
AND bm.`option_type` = 'bzips'  
AND bm.selected_option_key IN (37027)
GROUP BY b.b_id 

この 2 番目の SQL は、b_id 5024 と 4987 を返します。

SELECT b.b_id 
FROM `buy` b 
    INNER JOIN `buy_multiples` AS bm 
        ON b.b_id = bm.b_id 
        AND b.buy_status IN (2)  
WHERE bm.`option_type` = 'bzips'  
AND bm.selected_option_key IN (37027)
GROUP BY b.b_id 

この 3 番目の SQL は、b_id 5024、4987、および 4989 を返します。

SELECT b.b_id 
FROM `buy` b 
    INNER JOIN `buy_multiples` AS bm 
        ON b.b_id = bm.b_id 
        AND b.buy_status IN (2)  
WHERE bm.`option_type` = 'area_id'  
AND bm.selected_option_key IN (10)
GROUP BY b.b_id 

最初の行がゼロ行を返すのはなぜですか?

4

2 に答える 2

1

bm.option_type = 'area_id'
最初のクエリでは、 ANDのレコードを探していますbm.option_type = 'bzips'。これは常に 0 の結果を返します。使用したい:

SELECT b.b_id 
FROM `buy` b 
    INNER JOIN `buy_multiples` AS bm 
        ON b.b_id = bm.b_id 
        AND b.buy_status IN (2)  
WHERE bm.`option_type` = 'area_id'  
AND bm.selected_option_key IN (10)
OR bm.`option_type` = 'bzips'  
AND bm.selected_option_key IN (37027)
GROUP BY b.b_id 
于 2013-04-30T13:00:06.100 に答える
0

たぶん、あなたはこのようなものを求めています...

SELECT DISTINCT b.b_id 
  FROM buy b 
  JOIN buy_multiples bm 
    ON bm.b_id = b.b_id 
 WHERE b.buy_status IN (2)  
   AND (
        (bm.option_type = 'area_id' AND bm.selected_option_key IN (10)) 
     OR (bm.option_type = 'bzips' AND bm.selected_option_key IN (37027))
       );  
于 2013-04-30T13:00:12.697 に答える